私は次のようにコーディングしました。
$ 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を使用し、隠された名前と一致するように追加します。o
O
n
Om
D
答え2
いくつか:
-I
コマンドで何が起こっているのかを知らせるxargs
ことが不足しています。{}
-0
NULL で区切られた入力を期待しています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