dwu*_*uuu 6 sed find shell-script
我的任务的挑战是file.txt可以在子文件夹或子子文件夹中。一般结构如下所示:
folder
|___subfolder
|_____file.txt
|
|___subfolder
|____subfolder
|_______file.txt
etc
Run Code Online (Sandbox Code Playgroud)
我之前的代码没有处理子子文件夹,我不知道如何添加这部分(因为某些子文件夹没有任何后续文件夹)
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
Run Code Online (Sandbox Code Playgroud)
我还了解到有一种使用方法find,例如:
find . -name 'file.txt' | sed command file.txt
Run Code Online (Sandbox Code Playgroud)
显然这个不起作用,因为find只将目录返回到我的file.txt
Joh*_*024 17
尝试:
find . -name 'file.txt' -exec sed command {} +
Run Code Online (Sandbox Code Playgroud)
这file.txt会在这些文件的子目录中找到所有命名为该文件的文件,.并sed command针对这些文件运行。
如果要sed就地修改这些文件,请添加该-i选项。
虽然-exec ... +现在POSIX要求(帽子提示:jordanm),但有些人可能正在使用find不支持+. 如果您有其中之一,请使用(帽子提示:unxnut):
find . -name 'file.txt' -exec sed command {} \;
Run Code Online (Sandbox Code Playgroud)
更安全的选择
如果对目录结构进行快速更改,-exec则可能会出现竞争条件。为了提高安全性,请使用-execdir(帽子提示:unxnut):
find . -name 'file.txt' -execdir sed command {} +
Run Code Online (Sandbox Code Playgroud)
注意,如果你的当前目录在你的PATH,那么-execdir将拒绝运行。