我是bash的新手,我试图cd到父目录的所有子目录,并在这些子目录包含的所有文件中执行命令。但它不工作。shell-script -cd在一个目录的所有子目录中,对它们的文件执行命令
for subdir in $parentdirectory
do
for file in $subdir
do
ngram - lm somefilename.lm - ppl file
done
done
我是bash的新手,我试图cd到父目录的所有子目录,并在这些子目录包含的所有文件中执行命令。但它不工作。shell-script -cd在一个目录的所有子目录中,对它们的文件执行命令
for subdir in $parentdirectory
do
for file in $subdir
do
ngram - lm somefilename.lm - ppl file
done
done
有很多方法可以做到这一点,但需要您明确地切换到该目录。假设$parentdirectory
正确初始化,那么你可以看看这样的:
for subdir in ${parentdirectory}
do
cd ${subdir} # go into the subdir
for file in * # glob expansion
do
ngram - lm somefilename.lm - ppl ${file}
done
cd .. # go back up
done
也可以看看在一流的高级Bash脚本编程指南:http://tldp.org/LDP/abs/html/loops1.html
如果你想用小做到这一点空间量,你可以使用find -exec来做一些事情。
如:
# add a file called foo into every subdirectory find . -type d -exec sh -c 'touch "$0/foo"' {} \;
或者,如果你想呼应字符串到每个刚刚创建这些文件的:
# find all files and append 'ABC' into them find . -type f -exec sh -c 'echo "ABC" >> $0' {} \;
的find -exec
组合是一个非常强大工具,可以节省您一些目录/文件导航,并允许您实现它所期望的功能,而无需播放下降/提升目录结构。另外,正如你大概猜测的那样,如果你不小心,这种事情会变得非常糟糕,所以请谨慎使用。
你是否试图以特定的顺序走过一个目录,或者你只是想确保程序在每个级别执行? –
我想在每个级别执行。 – user3606057