【问题标题】:Bash loop to make directories in every child directoryBash循环在每个子目录中创建目录
【发布时间】:2019-01-22 21:44:48
【问题描述】:

我想在每个子目录中创建 2 个目录(基本上是一个嵌套循环)。
又名:我想在每个音频和视频文件夹 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)

【问题讨论】:

  • 我很惊讶rm -r 创建了任何目录,但听起来你想要一个 for dir in */*/

标签: bash loops directory


【解决方案1】:

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

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

或者使用find:

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

【讨论】:

    【解决方案2】:
    1. 这不是 Bash 变量范围的工作方式 - 内部循环会覆盖外部循环中 dir 的值。
    2. for dir in */ 也没有真正进入那个目录,所以你通过双循环实现的所有目标都是遍历 . N次,每个子目录一次。作为@thatotherguy wrote,你想要for dir in */*/
    3. rm 不创建任何目录。为此,您需要 mkdir

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多