有没有一种有效的方法来替换空格_文件名? (数千个文件)
我有一个目录“FolderName”,每天有10,000个新文件。几乎这些文件中的一半的命名如下:有没有一种有效的方法来替换空格_文件名? (数千个文件)
filename_yyyy-mm-dd_hh:mm
而另一半被命名为:
filename_yyyy-mm-dd hh:mm
(与空间,而不是下划线)
的剧本,我想设置应执行以下操作:
只重命名名称中包含空格的文件,跳过不需要处理的文件。
我无法找到使脚本高效的方法,我需要真的跳过好的一半,我的脚本试图mv任何文件,它是相当长和低效率。任何更好的设计的好主意?
谢谢大家
for f in "$(find . -name '* *')"; do mv $f $(echo $f | sed 's/\ /_/'); done
将做到这一点。使用find的-exec
选项也应该有更好的方法。
编辑: 如果函数放在一个脚本,然后找到可以直接使用:
cat <<EOF > space_to_underscore
#!/usr/bin/env bash
mv "$1" "$(sed 's/\ /_/' <(echo "$1"))"
EOF
chmod +x space_to_underscore
find . -name '* *' -exec ./space_to_underscore {} \;
这将是比使用for循环更快。
谨慎解释downvote? – bschlueter
重命名只包含在其名称中有空格的文件,而忽略那些不需要处理文件:
for file in *\ * ; do mv "$file" "${file// /_}" ; done
移动所有文件早于一个星期了“NewFolderName”文件夹:
find -mtime 7 -exec mv {} NewFolderName/ \;
查看rename
实用程序,这是一个专为此设计的Perl脚本,它功能强大而且速度很快。
rename -n ' ' _ *\ *
或者:
find /path/to/dir -type f -name '* *' -exec rename -n ' ' _ {} \;
的-n
标志是预演,打印什么工作,而无需实际重新命名任何事情发生。如果输出看起来不错,请移除标志并重新运行。
与传统rename
你可以很容易地转换单一的空间来强调
$ rename ' ' '_' files
你能告诉我们你的脚本,因为它看起来的权利吗? – larsks
如果你有重命名工具,它会很容易。这个网站上有很多答案。 – karakfa
如果您将所有文件重命名为'yyyy-mm-dd_hh:mm_filename'形式,您可以轻松地对旧文件进行排序和移动。或者使用'-k'进行排序并与截止日期进行比较 – dawg