使用终端,我需要使用 mv
/tr
/find
编写命令到:
- 查找名称以
a
、o
或e
开头的文件:[a,o,e]*
。 - 使用
tr
或mv
将这些文件名的首字母从小写改为大写。
一切都必须在一个命令中,而不是脚本中。我尝试过这样的事情:
find -name "[a,o,e]*" -exec {} mv [a,o,e]* [A,O,E]* \;
但它不起作用。
最佳答案
这是一个示例,其中包含我的一些以字母 p
和 g
开头的文件:
$ find . -name '[pg]*.py'
./pycurl-example.py
./pymusic.py
./gtkmenu.py
您可以使用如下所示的内容,但不幸的是,它不会在第一次出现时停止 - 它会翻译找到的所有字母:
$ find . -name '[pg]*.py' |tr '[pg]' '[PG]'
./Pycurl-examPle.Py
./Pymusic.py
./Gtkmenu.Py
Sinc tr
没有像 sed 那样在第一次出现时停止的选项,你可以使用这样的技巧:
$ find . -name '[pg]*.py' -exec bash -c 'echo -n "${0:2:1}"|tr 'pg' 'PG' && echo "${0:3}"' {} \;
Pycurl-example.py
Pymusic.py
Gtkmenu.py
或者甚至更简单,没有tr
但使用纯bash(来自@Nominal Animal评论的想法)
$ find . -name '[pg]*.py' -exec bash -c 'fn="${0:2}";echo "${fn^}"' {} \;
Pycurl-example.py
Pymusic.py
Gtkmenu.py
或者,如果您的目的是进行真正的重命名:
$ find . -name '[p]*c.py' -exec bash -c 'fn="${0:2}";mv -v "${fn}" "${fn^}"' {} \;
renamed 'pymusic.py' -> 'Pymusic.py'
以及适用于任何路径的更复杂的重命名:
$ find . -name 'g*.sh' -exec bash -c 'pn="${0%/*}";fn="${0##*/}";mv -v $0 ${pn}/${fn^}' {} \;
renamed './kalitools/Bluelog/scripts/gen_oui.sh' -> './kalitools/Bluelog/scripts/Gen_oui.sh'
renamed './greptest.sh' -> './Greptest.sh'
关于linux - 如何在 Linux 上使用 tr 或 mv 仅将文件名中的第一个字母大写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49458805/