我是bash的新手,我正在尝试cd到父目录的所有子目录,并在这些子目录包含的所有文件中执行命令。但它不起作用。
for subdir in $parentdirectory
do
for file in $subdir
do
ngram - lm somefilename.lm - ppl file
done
done
答案 0 :(得分:0)
有很多方法可以做到这一点,但是需要你明确地改变到那个目录。假设$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-Scripting指南:http://tldp.org/LDP/abs/html/loops1.html
答案 1 :(得分:0)
如果您想在少量空间下执行此操作,则可以使用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
组合是一个非常强大的工具,可以节省您的一些目录/文件导航,并允许您实现它所需的功能,而不必通过下降/上升目录结构。
另外,正如你可能猜到的那样,如果你不小心,这种事情可能会出现严重错误,所以请谨慎使用。