组织文件夹

组织文件夹

我有几个文件夹(“amazon”、“niger”、“rhine”......)。每个文件夹内都有几个子文件夹(“gfdl”、“hadgem”、“ipsl”......)。每个子文件夹由 5 个子文件夹组成(例如,在“amazon”中,子文件夹“gfdl”由 5 个子文件夹“amazon_gfdl”、“amazon_gfdl1”、“...”、“amazon_gfdl5”组成);其他子文件夹遵循相同的结构(例如,在“amazon”中,子文件夹“ipsl”由 5 个子文件夹“amazon_ipsl”、“amazon_ipsl1”、“amazon_ipsl2”......直到“amazon_ipsl5”组成)。

我有大量遵循相同组织框架的文件夹。因此我的问题如下:

我如何组织每个文件夹和子文件夹,使得在每个子文件夹(“gfdl”、“hadgem”、“ipsl”...)中创建 4 个新目录(“1”、“2”、“3”、“4”);然后将文件夹(例如“amazon_gfdl”(已存在于“gfdl”中)复制到每个新目录中,最后将“amazon_gfdl1”移动到新目录“1”,将“amazon_gfdl2”移动到新目录“2”,依此类推!

我目前正在使用命令 cp 并在每个子文件夹内移动,但它的效率并不高,我可能需要额外的生命才能以这样的方式结束这项任务!因此,任何帮助或提示都将不胜感激。非常感谢!

答案1

您可以运行此脚本,它除了回显命令外什么也不做。当它执行您想要的操作时,请将 替换dont=echodont=ie nothing。

dont=echo
for dir in */*
do if ! [[ "$dir" =~ [1234]$ ]]
   then file=${dir/\//_}
        for i in 1 2 3 4
        do $dont mkdir $dir/$i
           $dont cp -r $dir/$file $dir/$i
           $dont mv $dir$i $dir/$i
        done
   fi
done

答案2

你应该尝试写一些类似这样的内容:

for dir in */; do
  echo "Moving into $dir"
  cd "$dir"
  for subDir in */; do
    echo "Moving into $subDir"
    cd "$subDir"
    for num in 1 2 3 4; do
      echo "Moving $dir_$sudDir$num to $num"
      mv -vRi "$dir_$sudDir$num" "$num"
    done
  done
done

我没有测试过这个,不建议在测试之前运行它。由于运行的 bash 版本,某些 mv 标志在 Mac OSX 上不起作用 - 但它应该在 Ubuntu 上起作用。

再次 - 摆弄上面的代码直到它完成您想要的功能 - 您可能需要研究 bash 的循环,或者可能使用命令find在一行中执行类似的代码块。

有关的:如何通过命令行重命名目录?

相关内容