AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 655650
Accepted
steve
steve
Asked: 2015-08-03 04:36:26 +0800 CST2015-08-03 04:36:26 +0800 CST 2015-08-03 04:36:26 +0800 CST

整理文件夹

  • 772

我有几个文件夹(“亚马逊”、“尼日尔”、“莱茵河”……)。在他们每个人里面我有几个子文件夹(“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 并在每个子文件夹中移动,但它并不是很有效,我可能需要额外的生命来结束这样的任务!因此,任何帮助或提示将不胜感激。非常感谢你!

bash
  • 2 2 个回答
  • 164 Views

2 个回答

  • Voted
  1. Best Answer
    meuh
    2015-08-03T06:51:58+08:002015-08-03T06:51:58+08:00

    您可以运行此脚本,它只会回显命令。当它执行您想要的操作时,将其替换为dont=echoie dont=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
    
    • 1
  2. bfosterscripps
    2015-08-03T06:36:28+08:002015-08-03T06:36:28+08:00

    你应该尝试写类似这样的东西:

    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 for 循环,或者可能使用find命令在一行中执行类似的代码块。

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

    • 0

相关问题

  • 同时复制到两个位置

  • 如何在 shell 脚本中创建选择菜单?

  • 从 bash 迁移到 zsh [关闭]

  • bashrc 还是 bash_profile?

  • 备份 bash 脚本未压缩其 tarball

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve