输入每个文件夹并执行命令(bash或awk等)

时间:2013-11-07 19:25:07

标签: bash

我正在寻找最有效的方法来做到这一点,但不知何故,答案都不能使我感到不适(因为我可能不太好实施它们)。

所以这是我的问题,我想在bash中输入一个脚本,它输入每个文件夹(在实际路径中)并执行命令。 该文件夹的名称共享一些字符,但你可以用一个简单的规则说明,所以为了解决问题,可以说所有这些都有随机名称。

我试图做类似的事情:

cd main_folder  
cd subfolder_1_a
   do something
cd ..
cd subfolder_2_b
   do something
... 
...
cd subfolder_n_z
   do something

然后我也想得到如果可能,这个例子中的文件夹名称的一些字符我想得到最后一个字母(a,b ... z)

在这部分中要更清楚:

在subfolder_a里面我想做一个像:

这样的命令
if a< 5
command
cd ..
cd subfolder_b
if b<10
command 
etc

我需要一些帮助! 谢谢!

3 个答案:

答案 0 :(得分:2)

尝试(sh,因此也bash

for dir in */; do
    dir=${dir%/}
    yourcommand "$dir"
done

有一个相关的问题:当前工作目录中没有目录时,循环将运行一次,dir设置为*。在bash中,您可以通过预先shopt -s nullglob

来解决

编辑:也许这可以帮到你。

for dir in */; do
    cd "$dir"  # go to subfolder
    dir=${dir%/}  # remove trailing slash
    dir=${dir#subfolder_}  # remove "subfolder_" prefix (no error checking)

    # now do something inside the subfolder. The suffix following the
    # subfolder_ prefix is now stored in the variable "$dir"

    cd -  # go back to parent folder (more precisely, to last folder in history)
done

答案 1 :(得分:0)

您可以在BASH脚本中尝试一个简单的for循环:

for i in "folder1" "folder2" "folder3"
do
   cd "$i"
   pwd
done

答案 2 :(得分:0)

可能存在一些语法问题,但基本上它的作用是对于main_folder目录中的每个条目,如果条目是目录(表示文件夹),则运行该命令。

cd /to/your/main_folder
for i in *; do 
   if [ -d "${i}" ]; then 
      # do your commands for example move the directory to home
      mv "${i}" /home
   fi
done