linuxでのファイル操作コマンドに関する質問です。あるディレクトリに大量のファイルがあります。このディレクトリから1000件ずつ別のディレクトリにファイルを移動したいのです。移動対象の1000件に関する抽出条件は特にございません。QmailのMaildirが一杯になってしまってメールクライアントで受信できなくなってしまい、ディレクトリごとバックアップを取ったのですが、すこしづつ戻して受信したいのです。どなたかお知恵を貸してください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/07/04 11:15:22
  • 終了:2007/07/04 21:04:41

回答(3件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/07/04 11:55:00

ポイント100pt

使用するシェルによって文法は若干異なると思いますが、bash だと下記のような感じでしょうか。

for file in `ls | head -1000`
do
mv $file 移動先フォルダパス
done

実行フォルダ内にサブフォルダがある場合は、ls でファイルに絞るようにする必要があります。

http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO-7.html

id:s-mik

ナルホド!!!

バッチリでした。

2007/07/04 20:58:41
id:dev_zer0 No.2

dev_zer0回答回数332ベストアンサー獲得回数252007/07/04 12:43:31

ポイント100pt

ls > list.txtでファイル一覧をlist.txtに落とします。

split list.txtで1000行づつにlist.txtを分割します

# splitのデフォルト動作はファイルを1000行単位に分割します

http://www.linux.or.jp/JM/html/GNU_textutils/man1/split.1.html


分割したファイル一覧をmvします。

以下は例です。

分割結果のファイルリストがxaa, xab...で移動先がhogeと仮定します

mv `cat xaa` hoge

mv `cat xab` hoge

   :

分割ファイル分、ひたすらmvする(またはシェルでループさせる)

でどうでしょうか?

id:s-mik

この手もありますね。

ありがとうございました。

2007/07/04 20:59:29
id:masahikokimoto No.3

masahikokimoto回答回数241ベストアンサー獲得回数102007/07/04 13:30:50

ポイント100pt

http://q.hatena.ne.jp/1183515321

URLはダミーです。

cshの場合ですが。

ls > list.txt

split -l 1000 list.txt

foreach file (x*)

mv `cat $file` 移動先ディレクトリ

end

とかしてやれば良いのではないでしょうか。

いきなりmvがこわかったらechoにして引数が正しいか確認してから実行すると良いかと思います。

なお、1つづつ移動するのでも良いのなら

find . -exec mv {} 移動先ディレクトリ \;

というのでもいけるかとは思いますが。

id:s-mik

cシェルは使ったことがなかったのですが、これを機に勉強したいと思います。ありがとうございました!!!

2007/07/04 21:00:28

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません