2016-11-11 41 views
0

我是bash的新手,我试图cd到父目录的所有子目录,并在这些子目录包含的所有文件中执行命令。但它不工作。shell-script -cd在一个目录的所有子目录中,对它们的文件执行命令

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

你是否试图以特定的顺序走过一个目录,或者你只是想确保程序在每个级别执行? –

+0

我想在每个级别执行。 – user3606057

回答

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脚本编程指南:http://tldp.org/LDP/abs/html/loops1.html

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组合是一个非常强大工具,可以节省您一些目录/文件导航,并允许您实现它所期望的功能,而无需播放下降/提升目录结构。另外,正如你大概猜测的那样,如果你不小心,这种事情会变得非常糟糕,所以请谨慎使用。

相关问题