2012-08-13 6 views
17

mv folder2/*.* folderコマンドを実行すると、「引数リストが長すぎます」というエラーが表示されます。多数のファイルを移動する

このエラーを処理するlsrmの例は、find folder2 -name "*.*"です。しかし、私はmvにそれらを適用することができません。

+0

この質問は尋ねたS.O.にここで答えています週単位で尋ねる前に検索する方法を学んでください。がんばろう。 – shellter

+0

@shellter私はいくつかの同様の例を見つけますが、私が言ったように、それらのすべては 'ls'と' rm'の例です。 – DrXCheng

+1

@ shellter、たくさんのdupsがある場合、1つを見つけて閉じるように投票してください。 –

答えて

47
find folder2 -name '*.*' -exec mv {} folder \; 

-exec\;は、EXECコマンドの終わりをマークし、見つかったファイル名を挿入し{}、任意のコマンドを実行します。

+0

答えをありがとう、私はいくつのファイルがmvを動かすことができるのだろうかと思っています。mvのファイル数の限界は何ですか? – Thunder

12

もう1つはfindですが、ファイルごとに1つのコマンドが実行されるため、多数のファイルに対して非常に遅いです。はるかに効率的なアプローチはfindの終わりに+を使用するか、またはxargsを使用するようにされて、次のいずれか

# Using find ... -exec + 
find folder2 -name '*.*' -exec mv --target-directory=folder '{}' + 

# Using xargs 
find folder2 -name '*.*' | xargs mv --target-directory=folder 
+0

通常は合意していますが、まっすぐな 'mv'が"引数リストが長すぎます "というエラーを生成すると、' find'を使ってビルドしたものがうまく動作するかどうか疑いがあります。 –

+1

私は私がフォローしているか分からない。これは 'find'の最後にある' + 'の全体のポイントです。それを使うと、 'find'は' find | xargsの組み合わせ。 – Idelic

+0

OPがすべてのファイルを一度に移動しようとしたときにシェルがエラーを起こしました。 'find'と' xargs'の両方が実際に同じシェルコマンドを実行して実際に移動するため、エラーも出る可能性があります。だからこそ、私は一度に1つの方法を提案していますが、それは遅いです。 –

関連する問題