【问题标题】:Linux bulk file rename/copyLinux批量文件重命名/复制
【发布时间】:2016-04-09 20:41:31
【问题描述】:

在 Linux 中,我有一个永久的目录结构,它存储 5 种不同类型的文件,可以追溯到 2005 年的每个月,就像这样

2005/01/file1 文件2 文件3 文件4 文件5

2005/02/file1 文件2 文件3 文件4 文件5

...

2015/11/file1 文件2 文件3 文件4 文件5

2015/12/file1 文件2 文件3 文件4 文件5

我需要从相同的临时目录结构中替换 file1 的每个实例,除了临时结构中的每个叶子只有 file1(file2/3/4/5 不存在)。如何执行一个批量命令将永久结构中的每个 file1 重命名为 file1.bak,然后执行一个命令将每个新的 file1 实例复制到永久结构中的正确位置?

【问题讨论】:

  • 你可以试试rename 1 1.bak 20??/??/file1。或者,您可以使用 for 循环。 for dir in 20??/??; do mv ${dir}/file1 ${dir}/file1.bak。至于复制到永久目录,只需要在父目录前加上前缀,使用与for循环相同的逻辑即可。

标签: linux unix


【解决方案1】:

另一个对您可能有用也可能没用的替代方法是 vidir,它位于 Debian 系列发行版的 moreutils 软件包中。

它会在您的$EDITOR(或您系统的默认编辑器)中打开您的目录,您可以在此处编辑文件以随心所欲。然后,您可以使用 $EDITOR 的搜索/替换功能重命名文件并保存。

【讨论】:

    【解决方案2】:

    您可以使用此命令将所有file1重命名为file1.bak

    find . -name file1 | sed -e "p;s/file1/file1.bak/" | xargs -n2 mv
    

    然后用cp -R复制新文件file1

    【讨论】:

      【解决方案3】:

      我首先从多重重命名开始—— cd 进入您要搜索的根目录..(在/2015/ 上方)。

      find spec -name "*file1" -exec sh -c 'echo mv "$1" "$(echo "$1" | sed s/file1\$/bak.file1/)"' _ {} \;
      

      如果您确定文件结构相同,则只需执行大量 cp。假设我们正在使用 /var/www/2015//var/www/COPY/ 并且这两个目录在内部是相同的结构......那么简单

      cp -R /var/www/COPY/* /var/www/2015/
      

      COPY 中执行的2015 中不存在的任何文件都将从/var/www/COPY/ 复制到/var/www/2015/,而不会覆盖现有文件(file2、3 4 5 等)。

      【讨论】:

        猜你喜欢
        • 2015-08-15
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 2021-06-17
        • 2018-04-26
        • 1970-01-01
        • 2013-12-19
        相关资源
        最近更新 更多