複数のスペースを使用するパイプの内容

複数のスペースを使用するパイプの内容

テキストファイルにリストされているファイルをディレクトリにコピーしようとしています。たとえば、次のようになります。

cat files.txt | xargs  -I{} cp "{}" ~/Desktop/temp

ところで、一部のファイルをコピーできないことがわかりました。コピーできないファイル名には、「My Document.pdf」などの二重スペースが含まれています。

私はいくつかのテストを行いましたが、単にエコーをパイピングすると、空白の1つだけを除いてすべて削除されます。たとえば、

echo "Hello         World" | xargs echo

ただ戻ってください。

こんにちは世界

パイピング中にコンテンツの既存のスペースを保持するように指示する方法はありますか?

ベストアンサー1

xargs残念ながら、多くの入力内容を分析し、ファイル名の文字(スペース、引用符/アポストロフィ、バックスラッシュ、タブなど)によっては、さまざまな方法でファイルが破損する可能性があります。ファイル名を処理する最善の方法は、空のリストで区切って使用することですxargs -0(これにより、すべての解析がオフになります)。ファイルリストがから作成された場合、findこれは簡単です(のみ使用-print0)。 Perlスクリプトの出力を処理しているので、2つのオプションがあります。改行の代わりにnull値を出力するようにPerlスクリプトを変更するか、そうでない場合は、次のようにパイプラインから変換しますtr

cat files.txt | tr "\n" "\0" | xargs -0 -I{} cp "{}" ~/Desktop/temp

おすすめ記事