查找stdout.1.0文件并向上移动2/3级重命名为testjob.out
解决方案
移动到文件所在位置的上2级目录并重命名
使用find结合mv命令,通过嵌套dirname获取目标路径:
find . -type f -name stdout.1.0 -exec sh -c 'mv "$0" "$(dirname "$(dirname "$0")")/testjob.out"' {} \;
- 说明:
dirname "$0"获取当前文件的所在目录,再次调用dirname就能得到其上2级目录;最后拼接新文件名testjob.out完成移动重命名。
移动到文件所在位置的上3级目录并重命名
增加一层dirname来定位上3级路径:
find . -type f -name stdout.1.0 -exec sh -c 'mv "$0" "$(dirname "$(dirname "$(dirname "$0")")")/testjob.out"' {} \;
注意事项
- 如果目标目录已存在
testjob.out,默认会被覆盖。若要避免覆盖,给mv加上-n参数:mv -n "$0" ... - 可以先执行预览命令确认操作路径,比如对应2级移动的预览:
确认无误后再执行实际的find . -type f -name stdout.1.0 -exec sh -c 'echo "将移动: $0 -> $(dirname "$(dirname "$0")")/testjob.out"' {} \;mv命令。
内容的提问来源于stack exchange,提问作者ckelmeckis
相关产品推荐
相关产品推荐

