shell-script -cd在目录的所有子目录中,对其文件执行命令

时间:2016-11-11 23:23:05

标签: shell subdirectory cd

我是bash的新手,我正在尝试cd到父目录的所有子目录,并在这些子目录包含的所有文件中执行命令。但它不起作用。

for subdir in $parentdirectory
do 
    for file in $subdir
    do
    ngram - lm somefilename.lm - ppl file
    done
done

2 个答案:

答案 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组合是一个非常强大的工具,可以节省您的一些目录/文件导航,并允许您实现它所需的功能,而不必通过下降/上升目录结构。

另外,正如你可能猜到的那样,如果你不小心,这种事情可能会出现严重错误,所以请谨慎使用。