Linux大容量文件重命名/复制



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

2005/01/file1 file2 file3 file4 file5

2005/02/file1 file2 file3 file4 file5

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

2015/12/file1 file2 file3 file4 file5

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

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

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

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

我首先将多重重命名--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/

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

另一个对您有用或不有用的替代方案是vidir,它位于Debian家族发行版的moreutils包中。

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

最新更新