如何用FIND命令为同名文件追加源文件夹名以避免覆盖?
解决方法
直接修改原命令,利用basename获取文件所在的父目录名,拼接成新的目标文件名,最终命令如下:
find . -name "a.txt" -execdir sh -c 'cp -v "$0" "/path/to/dest/$(basename "$PWD")_a.txt"' {} \;
命令拆解:
-execdir sh -c '...' {} \;:在每个找到a.txt的目录下启动shell执行后续命令,{}会被替换为当前找到的a.txt文件路径$(basename "$PWD"):提取当前工作目录(也就是a.txt所在的父目录,比如example1)的名称/path/to/dest/$(basename "$PWD")_a.txt:拼接出目标路径和文件名,最终生成example1_a.txt这类格式的文件- 保留
echo可以先预览执行的复制命令(比如find . -name "a.txt" -execdir sh -c 'echo cp -v "$0" "/path/to/dest/$(basename "$PWD")_a.txt"' {} \;),确认无误后再去掉echo执行实际复制
注意:如果目标目录/path/to/dest/不存在,需要先执行mkdir -p /path/to/dest/创建目录。
内容的提问来源于stack exchange,提问作者TheCodeNovice
相关产品推荐
相关产品推荐

