2017-08-09 18 views
0

xargsを使用してファイルの名前をエコーし​​ようとしています。 catが交換されていないされた後、ここにコマンドが何らかの理由でしかしxargsが2番目の{}を置き換えない理由

find output/ -type f | xargs -I {} sh -c "echo {} ; cat {}"

で、第二交換してください。 のファイルの中にはのファイルしかないので、一部のファイルは正しく動作します。

明確にするために、私は、ファイル名の後ろにファイルの名前を表示するコマンドを探していません。この特定のコマンドが機能しない理由を理解しようとしています。

+0

https://stackoverflow.com/questions/36224777/xargs-command-length-limits/45595216#45595216 –

答えて

0

それは短いファイル名での作業と長いもののために、故障したコマンドが長すぎたことが判明し、soから。 man xargs

-I replstr Execute utility for each input line, replacing one or more occurrences of replstr in up to replacements (or 5 if no -R flag is specified) arguments to utility with the entire line of input. The resulting arguments, after replacement is done, will not be allowed to grow beyond 255 bytes; this is implemented by concatenating as much of the argument containing replstr as possible, to the constructed arguments to utility, up to 255 bytes. The 255 byte limit does not apply to arguments to utility which do not contain replstr, and furthermore, no replacement will be done on utility itself. Implies -x.

1

名前に空白が含まれていて問題が発生していませんか?このように、「\を追加してみてください:。

find output/ -type f | xargs -I {} sh -c "echo \"{}\" ; cat \"{}\"" 

これはバッシュを使用して私のために働いた

+0

良いアイデアをリンクするが、スペースは私の場合 –

+0

には存在しないこれがなければなりません通信ent。必要な場合は、まず詳細を尋ねる必要があります。これを読んでください:[回答] – Y0da

+0

あなたが 'set -x'を使ってコマンドを実行すると、Bashを使っていると仮定すると、動作しないファイル名の出力はどうなりますか? – Mats

関連する問題