我需要搜索(在整个磁盘上)并将一个文件替换(在有匹配项的地方)另一个文件(都在同一路径中)。
例子:
Folder 1
x*.txt (good) (e.g.: xFile.txt)
*.txt (bad) (e.g.: File.txt)
如果同一路径中的两个文件都匹配,我需要删除:*.txt (e.g.: File.txt)
并将:重命名x*.txt (e.g.: xFile.txt)
为*.txt (e.g.: File.txt)
结果:
Folder 1
*.txt (e.g: File.txt... old xFile.txt)
我使用这个命令:
find -name 'x*.txt' | sed -r 'p;s/g([^\/]*.txt)/\1/' | xargs -d '\n' -n2 mv
问题是该命令在执行命令之前不会验证两个文件是否存在(同一路径中的 xFile.txt 和 File.txt)
我该如何解决?提前致谢
使用 GNU 工具,您可以执行以下操作:
这假设没有名称以多个开头的文件
x
。例如,它不会做mv ./xx.txt ./x.txt
首先,我们定义一个函数来为我们完成工作:
现在,我们使用
find
一些黑魔法来迭代我们的弃儿:我们
find
用来定位所有带有.txt
扩展名的文件(这可以根据您喜欢的任何标准进行细化),然后通过 switcheroo 过程运行它们——我们[[ ... ]]
用来测试替换文件是否存在,如果它存在,用于mv
实现替换。