1

这个问题与重命名 Linux 系统上的目录中的文件有关,其中受影响的文件以这种一般格式出现:

index.html?p=155
index.html?page_id=10
index.html?author=2&paged=5
index.html?feed=rss2&tag=search-engine
index.html?tag=social-media

是否有一个 shell 级别的“重命名”命令可以用来在目录中的每个文件中用下划线 (_) 替换问号 (?)?

提前感谢您的任何建议或信息!

4

3 回答 3

1
for file in index.html\?*; do
  new=${file/\?/_} # Substitute underscore for ?
  mv "$file" "$new" # Rename the file
done

有关使用的替换语法的信息,请参阅bash 手册页的参数扩展部分。

于 2013-07-09T01:08:37.187 回答
1

您可以使用重命名命令。

rename '?' '_' *

第一个参数是您要替换的表达式,第二个参数是要替换第一个参数的字符串,最后一个选项是选择要应用它的文件(所有在当前目录中,在这种情况下)

有关更多详细信息,请参见手册页http://ss64.com/bash/rename.html

于 2013-07-09T01:12:01.700 回答
1

rename自己更喜欢这个命令,尽管有时滚动你自己的for循环可能更有针对性。

注意:rename表达式作为要更改的参数,将文件名作为最后一个参数。正确的使用调用是:

rename 's/\?/_/' index*

因为表示不转义?时前面字符的 0 或 1 。\

这也更容易折腾成find可以递归操作的命令等:

find . -name index.html* -exec rename 's/\?/_/' {} +
于 2013-07-09T01:29:16.660 回答