【发布时间】:2020-01-23 17:55:46
【问题描述】:
我有一个命令似乎成功地将双引号 (") 替换为当前目录中的文件名的单引号 (')。但是,我需要递归地执行此操作(即,所有子目录中的所有文件)。这里是我正在使用的代码:
for f in *; do
if [[ -f "$f" ]]; then
new_name=$(echo "$f" | sed "s/\"/'/g")
mv "$f" "$new_name"
fi
done
任何建议将不胜感激。
【问题讨论】:
-
更安全地使用
find -execdir来执行此操作,这样您的目录就不会在操作期间被符号链接换出。添加答案,稍等... -
(顺便说一句,如果可以避免
echo "...anything..." | sed,则最好避免它;与仅在bash内部进行字符串操作相比,启动外部程序或shell管道的成本很高-如果您的文件系统设置允许刷新-to-disk 被推迟,这可能比运行mv花费更多的时间;请参阅 BashFAQ #100 和/或 parameter expansion 上的 bash-hackers 页面了解替代方案。