xargを使用するときのファイル名の発音区別符号の処理

xargを使用するときのファイル名の発音区別符号の処理

xargs人々がファイル名のスペースを処理するのに問題がある同様の質問をここで見ました。驚いたことに、私はこの問題に直面していませんでしたが、同様の問題が発生しました。

多数のファイルから固定された数のファイル(非常に混乱した方法でランダムに選択されています)をコピーしています。コード行は次のとおりです。

find "/path/to/source/dir" -size +1k -type f -print0 | sort -R | ghead -z -n 10 | xargs -0 -I{} cp "{}" "/path/to/destination/dir"

各ファイルの名前は人の名前にちなんで指定されますので、宝くじ当選者に似ていると思います。描かれた人の中には偶然ドイツ人だったので、Matthäus Müllerのような非常にドイツ的な名前を持っていたかもしれません。 (他の特殊文字は考慮されません。)

このコードモンスターが名前(またはより正確にはファイル名)にウムラウトを持つ人を描くたびに、コピープロセスは停止します。

cp: /path/to/source/dir/Matthäus Müller.jpg: No such file or directory

すべてのファイル名にはスペースがあり、発音区別記号が付いたファイル名でのみ中断されるため、問題がスペース文字のためではないことを保証できます。

この問題を解決する方法はありますか?それとも、完全なメカニズムを別々に作成する必要がありますか(もしそうなら、どうすれば)?

注1:これらのファイル名を「Matthaeus Mueller.jpg」または同様のものに変更しても、この問題は回避できません。

注2:これが重要な場合、このスクリプトはmacOSで実行されます。

ベストアンサー1

-zNULLで終わるレコードがありませんsort。この問題を解決すると、問題は消えます(とにかく私の場合)。発音区別符号付きの名前を正常にコピーできるかどうかはかなり可能です。実際にはそれが問題だとは思わない。

はい

mkdir /tmp/610423/{src,dst}
cd /tmp/610423
touch 'src/Matthäus Müller.jpg' 'src/Peter Gurney' 'src/Tom Pearce'

# Error here
find /tmp/610423/src -type f -print0 | sort -R | head -zn10 | xargs -0 -I{} cp {} dst/
cp: cannot stat ''$'\n': No such file or directory

# No error here
find /tmp/610423/src -type f -print0 | sort -zR | head -zn10 | xargs -0 -I{} cp {} dst/

Debian Linuxディストリビューションでテストしました。私はあなたがgheadDebianで標準として使用するGNUプログラムであると仮定します。headあなたはsortそれを持っていますか-z?そうでない場合は、残りの-print0ユーティリティのパフォーマンスをもう一度考えてみることをお勧めします。もちろん大丈夫です。

おすすめ記事