2016-04-03 17 views
0

すべてのディレクトリを1GB未満で移動しようとしています。私は、このコマンドを使用しようとしています:1G未満のディレクトリを移動する

du -h -d 1 -t -1G | xargs -0 mv -it /destination/dir/ 

をしかし、私はエラーメッセージが表示されます:

ヘルプをいただければ幸いです
mv: cannot stat [...] File name too long 

:)

+0

xargsに '-L 1'を追加してみてください:du -h -d 1 -t -1G | xargs -0 -L 1 mv -it/destination/dir/' – saeedgnu

+0

ありがとう:)' -L 1'だが、 'mv:can not stat 'du -h -dを生成しようとした。-t 1 - 1G \ n ':そのようなファイルやディレクトリはありません '-n1'でもエラーメッセージを表示しました' mv:無効なオプション - ' h'' – nimrag

答えて

0

ここに私のニーズに対応する回避策があります。おそらく誰かがそれを拡張することができますか?とにかく、サブディレクトリについて心配する必要がない場合は、次のように動作します。

du -Sb -t -1G | cut -f 2- | xargs -d "\n" mv -t /path/to/destination/ 
0

私はわからないんだけど、あなたが使用している理由-0引数をxargsに設定すると、ファイル名が空白ではなくヌルバイトで区切られるように指定されています。 duの出力にはヌルバイトが含まれないため、出力全体が単一のファイル名として扱われ、表示されているエラーが発生します。

とにかく、私はfindを使用することをお勧めします:あなたはduは、すでにあなたが望む、代わりにそれを使用したい出力を生成していることを満足している場合

find /path/to/source -type d -size -1024M -exec mv -it /path/to/destination {} + 

、あなたは-0スイッチを追加することができるのでnullバイト区切り文字を使用すると、現在のxargsコマンドが機能するはずです。

+0

ありがとう:)残念ながら私は '私の意志に屈することを見つける。出力を確認するために '-exec'の前にすべてを実行するだけでは' -type'フラグを無視し、1024M未満のすべてのファイルを出力するようです。 – nimrag

+0

たぶん '-0'スイッチを' du'に追加するだけです(私の更新を見てください)。 –

+0

今、私たちは本当に近くになっています!問題は、 'du'が' mv'にパイプされるディレクトリサイズを出力していて、明らかに 'mv'がディレクトリ名を認識しないことだけです。 – nimrag

関連する問題