递归重命名JSON文件时如何将文件保留在原目录?
递归重命名JSON文件时如何将文件保留在原目录?
嘿,我来帮你搞定这个小问题!你现在的代码里mv "${line_content}" ${RANDOM}.json之所以会把文件移走,是因为只给了新文件名,没指定原文件所在的目录路径,系统默认就把文件挪到你执行脚本的当前目录了。这里有两个简单又靠谱的解决办法:
方法一:用dirname命令提取目录
dirname是专门用来从文件路径里剥离出目录部分的工具,用法非常直接:
# 先优化下find命令:加-type f确保只找文件(避免意外处理目录),给*.json加引号防止shell提前扩展 find . -type f -name "*.json" > json_list while read -r line_content; do # 提取原文件的目录路径 original_dir=$(dirname "$line_content") # 把随机文件名拼在目录后面,就能让文件留在原位置完成重命名 mv "$line_content" "${original_dir}/${RANDOM}.json" done < json_list
方法二:用Bash参数扩展(更高效)
如果你的脚本是在Bash环境下运行,还可以用内置的参数扩展功能,不用额外调用外部命令,速度会更快:
find . -type f -name "*.json" > json_list while read -r line_content; do # ${line_content%/*} 会自动去掉路径里最后一个/后面的内容(也就是文件名),只保留目录部分 mv "$line_content" "${line_content%/*}/${RANDOM}.json" done < json_list
另外给你提个小建议:${RANDOM}生成的是0到32767之间的随机数,虽然重复概率很低,但如果要处理的JSON文件特别多,还是有极小概率撞名。要是想更稳妥,可以结合时间戳一起用,比如改成${RANDOM}_$(date +%s%N).json,这样几乎不会出现重名的情况啦!
备注:内容来源于stack exchange,提问作者Katherina Marilla
相关产品推荐
相关产品推荐

