私のホームディレクトリ(その中のすべてのサブディレクトリを含む)で最初の100個の.jpgファイルのみを見つけてコピーするにはどうすればよいですか?

私のホームディレクトリ(その中のすべてのサブディレクトリを含む)で最初の100個の.jpgファイルのみを見つけてコピーするにはどうすればよいですか?

私は次のようにコーディングしました。

$ find . -maxdepth 1 -name '*.jpg' | head -n 100 | xargs -0 {} cp {} /home/rachael/backup

エラーは次のとおりです。

xargs: {}: No such file or directory

私のコードには何の問題があり、どのように修正しますか?

答え1

Steeldriverがコマンドでいくつかの問題を特定しました。しかし、シェルを使用してより短い解決策を追加したかったのですzsh(質問は1つのシェルに限定されないため)。

cp -- *.jpg(.[1,100]) ~rachel/backup

現在のディレクトリから、ワイルドカードパターンに一致する最初の100個の一般ファイル(事前順)をコピーします*.jpg

修正タイムスタンプに基づいて最も古い100個のファイルの場合は、最新の修正済み100個のファイルをインポートするには、代わりに*.jpg(.Om[1,100])小文字を使用して使用してください。ファイル名の数値の順序を取得する代わりにinを使用し、隠された名前と一致するように追加します。oOnOmD

答え2

いくつか:

  1. -Iコマンドで何が起こっているのかを知らせるxargsことが不足しています。{}

  2. -0NULL で区切られた入力を期待していますxargsが、改行で区切られた入力を渡していることを示します。

だから

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 -I{} cp {} /home/rachael/backup

GNUバージョンがある場合は、cp代替形式を使用する必要があります。

find . -maxdepth 1 -name '*.jpg' -print0 | head -zn 100 | xargs -0 cp -t /home/rachael/backup

関連情報