<分区>
用户输入他们要查找的文件类型;它存储在 $arg1
中;他们想要更改的文件类型存储为 $arg2
。我能够找到我要找的东西,但我不确定如何保持文件名相同,只是更改类型...即,file1.txt
为 file1.log
。
find . -type f -iname "*.$arg1" -exec mv {} \;
<分区>
用户输入他们要查找的文件类型;它存储在 $arg1
中;他们想要更改的文件类型存储为 $arg2
。我能够找到我要找的东西,但我不确定如何保持文件名相同,只是更改类型...即,file1.txt
为 file1.log
。
find . -type f -iname "*.$arg1" -exec mv {} \;
最佳答案
启用shell parameter expansions的全部功能,您可以在 exec
操作中调用 bash -c
:
find . -type f -iname "*.$arg1" \
-exec bash -c 'echo mv "$1" "${1/%.*/$1}"' _ {} "$arg2" \;
我们将 {}
和 "$arg2"
作为参数添加到 bash -c
,因此它们可以在命令中作为 $0
和 $1
。 ${0%.*}
删除扩展名,替换为 $arg2
扩展到的内容。
实际上,该命令只打印它要执行的 mv
命令;要实际重命名文件,必须删除 echo
。
引号是相关的:bash -c
的参数用单引号括起来,以防止 $0
和 $1
过早展开,并且mv
和 arg2
的两个参数也被引用以处理其中包含空格的文件名。
关于linux - 如何使用 Bash 更改类型为 "find"的文件的扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421969/