0

我正在寻找最有效的方法来做到这一点,但不知何故,没有一个答案能让我满意(因为我可能不太擅长实施它们)。

所以这是我的问题,我想要一个 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

请我需要一些帮助!谢谢!

4

3 回答 3

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
于 2013-11-07T19:28:08.753 回答
0

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

for i in "folder1" "folder2" "folder3"
do
   cd "$i"
   pwd
done
于 2013-11-07T19:27:35.173 回答
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
于 2013-11-07T19:27:59.033 回答