在Linux中,我有一个永久性的目录结构,可以追溯到2005年的每个月存储5种不同类型的文件,就像这样
2005/01 / file1 file2 file3 file4 file5
2005/02 / file1 file2 file3 file4 file5
...
2015/11 / file1 file2 file3 file4 file5
2015/12 / file1 file2 file3 file4 file5我需要从相同的临时目录结构替换file1的每个实例,除了临时结构中的每个叶子只有file1(file2 / 3/4/5不存在)。如何执行一个批量命令将每个file1重命名为永久结构中的file1.bak,然后将命令复制到永久结构中的每个新file1实例?
答案 0 :(得分:1)
我首先从多重名称开始 - 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
内的{' T EXIST'中的任何文件将从/var/www/COPY/
复制到/var/www/2015/
而不会覆盖现有文件(file2,3 4 5)等)。
答案 1 :(得分:1)
您可以使用此命令将所有file1
重命名为file1.bak
:
find . -name file1 | sed -e "p;s/file1/file1.bak/" | xargs -n2 mv
然后使用file1
cp -R
答案 2 :(得分:0)
另一个对您有用或可能没有用的替代方法是vidir
,它位于Debian系列发行版的moreutils
包中。
它会在$EDITOR
(或您系统的默认编辑器)中打开您的目录,您可以根据自己的内容编辑此处的文件。然后,您可以使用$EDITOR
的搜索/替换功能重命名文件并保存。