人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: s-mik
●カテゴリ:コンピュータ
✍キーワード:Linux qmail クライアント コマンド ディレクトリ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Mook
●100ポイント

使用するシェルによって文法は若干異なると思いますが、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

◎質問者からの返答

ナルホド!!!

バッチリでした。


2 ● dev_zer0
●100ポイント

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する(またはシェルでループさせる)

でどうでしょうか?

◎質問者からの返答

この手もありますね。

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


3 ● masahikokimoto
●100ポイント

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 {} 移動先ディレクトリ \;

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ