2017-11-25 12 views
0

指定されたディレクトリに多数のファイルがあります。たとえば、私はそれらの6つを1つの場所にコピーしたいと思います。 私はこの思い付いた:Linuxで 'a' 'c'または 'e'で始まる最初のN個のファイルをあるフォルダから別のフォルダにコピーします。

find . -type f |head -6| xargs cp /specified_dir/[ace]* -t /target_loc 

問題は「」「C」「E」で始まるすべてのファイルがコピーされていることです。最初の6つのファイルが必要ですが、私は8を受け取ります( 'a'で4、 'c'で3、 'e'で1)。 これを修正する方法があるのであれば、私は不思議に思っていました。あなたのコマンドで

答えて

0

あなたは([ace]で始まるファイルではありません)findからわずか6つの最初の結果を得ることが、何が最終的に実行すると、このコマンドは次のとおりです。

cp /specified_dir/[ace]* -t /target_loc <file_argument> 

すべてコピー[ace]*ファイルプラスターゲット位置にxargsを介して提供される<file_argument>。そしてこのコマンドを6回実行します。


最初に [ace]*ファイルを見つけ、そのうちの最初の6つを取得し( headと同様に)、コピーするファイルなしで最後のコマンドを書き込むと、この引数は xargsから提供されます。

find . -type f -name "[ace]*" | head -6 | xargs cp -t /target_loc 

これは間違っているか、少なくとも安全ではありません。たとえば、ファイル名にスペースが含まれていないためです。だから、この構文を使用することができます。

find . -type f -name "[ace]*" | head -6 | xargs -I{} cp {} -t /target_loc 

-Iは、置換文字列を設定し、これが後に存在しているときに、それが引用された引数の位置を意味します。

関連する問題