私のタスクの問題は、その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
されます。