我有一个包含很多文件的文件夹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.txt
和file05 01.txt
执行此操作?
我在想也许是这样的:
for f in file[04-05].txt ; do mv "$f" "${f// /x}" ; done
但是我没有正确的语法。
答案 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)