「file.txt」という名前のすべてのファイルを繰り返し検索し、sedコマンドを実行します。

「file.txt」という名前のすべてのファイルを繰り返し検索し、sedコマンドを実行します。

私のタスクの問題は、そのfile.txtタスクがサブフォルダまたはサブフォルダに配置できることです。一般的な構造は次のとおりです。

   folder
     |___subfolder
             |_____file.txt
     |
     |___subfolder
             |____subfolder
                      |_______file.txt
     etc

前のコードはサブサブフォルダを処理せず、この部分を追加する方法がわかりません(一部のサブフォルダには後続のフォルダがないため)。

 for dir in ./*/ ; do
        if [ -d "$dir" ]; then 
           cd $d;
           for subdir in ./*/; do
               cd $subdir && $(sed command file.txt) && cd ..;
           done
           cd ..
        fi
done

また、次のようなものを使用する一行方法があることも学びましたfind

find . -name 'file.txt' | sed command file.txt

find明らかに、これは私のディレクトリにのみディレクトリを返すので、うまくいきません。file.txt

ベストアンサー1

努力する:

find . -name 'file.txt' -exec sed command {} +

file.txtこれにより、サブディレクトリでそのファイルという名前のすべてのファイルが検索され、その.ファイルに対して実行されます。sed command

sedそのファイルを変更するには、この-iオプションを追加します。

-exec ... +今は必須ですがPOSIXfind(ヒント:jordanm)、一部の人々はunsupportedを使用している可能性があります+。次のいずれかがある場合は、以下を使用してください(ヒント:unxnut)。

find . -name 'file.txt' -exec sed command {} \;

より安全な選択

ディレクトリ構造をすばやく変更すると、-exec競合状態が発生する可能性があります。セキュリティを強化するには、以下を使用してください-execdir(該当するヒント:unxnut)。

find . -name 'file.txt' -execdir sed command {} +

ディレクトリに現在のディレクトリがある場合、実行はPATH拒否-execdirされます。

おすすめ記事