gpt4 book ai didi

linux - 如何查找和重命名多个文件

转载 作者:行者123 更新时间:2023-12-04 19:30:53 25 4
gpt4 key购买 nike

我在多个目录中有多个文件,我必须将这些文件从小写重命名为大写;文件扩展名可能会有所不同,并且需要小写(对于具有大写扩展名的文件也应该重命名)。
注意:我有 rename来自 util-linux 的版本在 CentOS Linux7 上。
我试过这个:

find /mydir -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\U$2/' {} \;
find /mydir -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$2\/\L$2/' {} \;
但它不工作它没有任何改变,我没有输出。
尝试了另一种解决方案:
for SRC in `find my_root_dir -depth`
do
DST=`dirname "${SRC}"`/`basename "${SRC}" | tr '[A-Z]' '[a-z]'`
if [ "${SRC}" != "${DST}" ]
then
[ ! -e "${DST}" ] && mv -T "${SRC}" "${DST}" || echo "${SRC} was not renamed"
fi
done
这个部分有效,但也将文件扩展名转换为大写。
关于如何将扩展保留/转换为小写的任何建议?
谢谢!

最佳答案

Perl 的可能解决方案rename :

find /mydir -depth -type f -exec rename -v 's/(.*\/)?([^.]*)/$1\U$2/' {} +

问题中的命令有几个问题。
您似乎混淆了 find 的语法的 -exec行动和 xargs .
find /mydir -depth -type f -exec rename -v 'substitution_command' {} \;
find /mydir -depth -type f| xargs -n 1 rename -v 'substitution_command'
xargs如果文件名包含空格,则版本会出现问题。
如果替换 \;+ , 多个文件名被传递给 rename 的一次调用.

替换命令仅受 rename 的 Perl 版本支持。命令。您可能必须安装此版本。见 Get the Perl rename utility instead of the built-in rename

替换在我的测试中不起作用。我成功使用
rename -v 's/(.*\/)?([^.]*)/$1\U$2/' file ...
第一组 (.*\/)?可选地匹配带有尾随 / 的字符序列.这用于复制未更改的目录。
第二组 ([^.]*)匹配除 . 之外的字符序列.
这是第一个点(如果有)之前的文件名部分,它将被转换为大写。如果文件名具有多个扩展名,则所有扩展名都将保持不变,例如 Path/To/Foo.Bar.Baz -> Path/To/FOO.Bar.Baz

关于linux - 如何查找和重命名多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72292083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com