ファイルに保存されているディレクトリのリストを find コマンドに渡します。

ファイルに保存されているディレクトリのリストを find コマンドに渡します。

ディレクトリとそのサブディレクトリ内のすべての.cファイルは、次のように見つけることができます。

find /user/home/me/tests/ -name \*\.c

ディレクトリのリストは「list_of_dir」ファイルに保存されます。

/user/home/me/test1
/user/home/me/test2
/user/home/me/test3
...

そのファイルとそのサブディレクトリにあるすべての.cファイルを見つけるためにfindコマンドをどのように提供できますか?

よろしくお願いします。

編集:私のデフォルトのシェルはtcshです。

ベストアンサー1

ファイルに改行区切りのディレクトリリストがあり、そのリストを安全に渡すlist_of_dir場合find噴射またはパス名拡張そして、行の長さの制限を超えずに以下を使用します(ここでそのオプションとオプションがxargsGNU実装であると仮定)。-d-r

xargs -r -d'\n' -I{} find {} -name '*.c' <list_of_dir

真のセキュリティのためには、改行で区切られたリストではなく、NULで区切られたディレクトリのリストを使用する必要があります。list_of_dir0NULで区切られたディレクトリのリストが含まれている場合は、次のようにします。

xargs -r -0 -I{} find {} -name '*.c' <list_of_dir0

どのように動作しますか?

  • -rfindディレクトリリストが空でない場合は、xargsを実行しないように指示してください。

  • -0入力時にNULで区切られたリストを期待するようにxargsに指示します。これは-d'\n'、改行で区切られたリストを期待するようにxargsに指示するよりも安全な方法です。

  • - xargs に find コマンドで文字が見える位置I{}にディレクトリを配置するよう指示します (一度に 1 つずつ、各ディレクトリに対して 1 つの呼び出しが実行されます)。{}find

おすすめ記事