需要重命名批处理文件的帮助

时间:2020-07-20 17:46:51

标签: bash shell

我有一个包含很多文件的文件夹X:

file01x01.txt
file02x01.txt
file03x01.txt
file04 01.txt
file05 01.txt

我想像前3个文件一样在0401和0501之间放置一个“ x”。到目前为止,我正在做类似的事情:

for f in *.txt ; do mv "$f" "${f// /x}" ; done

这可行,但是它适用于所有*.txt文件,我想避免这种情况。在我的示例中,如何仅对file04 01.txtfile05 01.txt执行此操作?

我在想也许是这样的:

for f in file[04-05].txt ; do mv "$f" "${f// /x}" ; done 

但是我没有正确的语法。

3 个答案:

答案 0 :(得分:2)

您可以使用*通配符和带引号的空格' '来查找名称中带有空格的文件。

for f in file*' '*.txt; do
    mv "$f" "${f// /x}"
done

答案 1 :(得分:0)

您也可以通过这种方式做到这一点:

find . -name "file*[[:space:]]*.txt" -exec bash -c 'f="{}"; mv "$f" "${f// /x}"' \;

答案 2 :(得分:0)

您可以使用rename工具。

如果文件名仅 个空格,就足够了:

$ rename -n 's/ /x/' *txt
rename(file04 01.txt, file04x01.txt)
rename(file05 01.txt, file05x01.txt)

({-n用于“空运行”,将其删除以执行实际的重命名)

如果文件名具有个以上空格字符,则可以使用以下命令:

$ rename -n 's/ (\d*.txt)$/x$1/' *txt
rename(file04 01.txt, file04x01.txt)
rename(file05 01.txt, file05x01.txt)
rename(file with spaces 06 01.txt, file with spaces 06x01.txt)