ItH*_*rtz 4 bash shell-script rename
要将所有文件/文件夹、所有子目录中的所有空格替换为连字符,我运行以下命令:
find /path/to/folder -depth -name "* *" -execdir rename 's/ /-/g' "{}" \;
Run Code Online (Sandbox Code Playgroud)
它有效。
要将所有文件/文件夹、所有子目录中的所有句点(不包括扩展名)替换为连字符,我运行以下命令:
find /path/to/folder -depth -name "*.*" -execdir rename 's/./-/g' "{}" \;
Run Code Online (Sandbox Code Playgroud)
但这不起作用。相反,它将文件名变成一长串 ------------
我究竟做错了什么?
cho*_*oba 12
句点在正则表达式中很特殊,它匹配任何字符。要按字面意思匹配句点,请反斜杠:
\nrename 's/\\./-/g'\n
Run Code Online (Sandbox Code Playgroud)\n对于包括 GNU 在内的-execdir
某些find
实现find
,每个名称都以句点开头。要跳过句点,请使用
's/(?<=.)\\./-/g'\n
Run Code Online (Sandbox Code Playgroud)\n(?<=.)
是一个后向断言,它检查句点之前是否有某些内容,但它不会被替换。
一些 perlrename
变体还支持一个-d
选项,使代码仅作用于文件的基本名称,然后您甚至不需要非标准-execdir
\xc2\xb9:
find /path/to/folder -depth -name '* *' -exec rename -d 's/\\./-/g' {} +\n
Run Code Online (Sandbox Code Playgroud)\n如果您想保留最后一个点,可以使用前瞻断言来仅替换后面跟着一个点的点。
\n's/(?<=.)\\.(?=.*\\.)/-/g'\n
Run Code Online (Sandbox Code Playgroud)\n\xc2\xb9 这意味着您还可以使用+
而不是;
调用一个rename
来处理多个文件。某些find
实现也支持+
,-execdir
但仍需要rename
为每个包含其名称中的文件的目录至少运行一次-
。
归档时间: |
|
查看次数: |
963 次 |
最近记录: |