【发布时间】:2014-10-07 11:23:06
【问题描述】:
我目前正在处理格式化文件名。下面我有一个 while 循环,它遍历文件名并用_ 替换空格,并保持连字符后的任何内容不变。现在问题是循环遍历find 命令的结果以格式化名称。在脚本中运行时,输出如下:
find: paths must precede expression: rename
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
重命名.sh
while read -r file
do
new_file=$(echo "$file" | sed -re 's/^([^-]*)-\s*([^\.]*)/\L\1\E-\2/' -e 's/ /_/g' -e 's/_-/-
/g')
echo "mv '$file' '$new_file'"
done < <(find ./ -type f rename)
之前的文件名:
'./My File - KeEp.txt'
之后的文件名:
'./my_file-KeEp.txt'
【问题讨论】:
-
...省略了哪些内容,因为这是脚本的重要部分,因为错误是find抱怨它的论点。 -
如果你使用
find,你也可以给它一个action来重命名文件。这样你就可以避免整个while do ... done < (find ...)结构。 -
@EtanReisner,那是我的错误。我更正了。
-
@Beta,好吧,我最初有一个操作确实变成了小写,删除了空格但影响了整个文件名。我只想重新格式化文件名的
-。