Bash循环在每个子目录中建立目录

时间:2018-08-16 01:28:52

标签: bash loops directory

我想在每个子目录中创建2个目录(基本上是一个嵌套循环)。
AKA:我想在每个音频和视频文件夹current folder structure

中创建2个{trimmed,original}文件夹

我尝试了以下bash命令:

for dir in */; do
for dir in */; do
mkdir -- "$dir"/{Trimmed,Original}; 
done
done

但是该代码在每个父文件夹(Cog和Personality)中都放置了两个文件夹,但在子目录(AudioCog,VideoCog,AudioPersonality,VideoPersonality)中没有放置任何文件夹

2 个答案:

答案 0 :(得分:1)

  1. 这不是Bash变量作用域的工作方式-内部循环从外部循环覆盖dir的值。
  2. for dir in */实际上也不会输入该目录,因此,使用double循环实现的所有操作都将遍历中的每个目录。 N次,每个子目录一次。作为@thatotherguy wrote,您需要for dir in */*/
  3. rm不创建任何目录。为此,您需要mkdir

答案 1 :(得分:1)

使用数组和parameter expansion的其他可能方式:

f=(./*/*/); mkdir "${f[@]/%/original}" "${f[@]/%/trimmed}"

或使用find

find . -mindepth 2 -maxdepth 2 -type d -exec mkdir {}/{original,trimmed} \;