在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
的搜索/替换功能来重命名文件并保存。