我想将文件扩展名从更改*.txt为*.text。我尝试使用该basename命令,但是在更改多个文件时遇到了麻烦。
这是我的代码:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
我收到此错误:
basename: too many arguments Try basename --help' for more information
我想将文件扩展名从更改*.txt为*.text。我尝试使用该basename命令,但是在更改多个文件时遇到了麻烦。
这是我的代码:
files=`ls -1 *.txt`
for x in $files
do
mv $x "`basename $files .txt`.text"
done
我收到此错误:
basename: too many arguments Try basename --help' for more information
Answers:
直接来自Greg的Wiki:
#将所有* .txt重命名为* .text
对于* .txt中的f;做
mv-“ $ f”“ $ {f%.txt} .text”
完成
另请参阅有关为什么不应该分析ls的条目。
编辑:如果您必须使用basename您的语法将是:
对于* .txt中的f;做
mv-“ $ f”“ $(基本名称-” $ f“ .txt).text”
完成
*.txt语法),该裸双破折号--,并在内部使用%符号的${}结构。到现在为止,我从未遇到过后两者,并且不知道前者真正发生了什么。
for f in *.txt; do mv -- "$f" "${f%.txt}.text"; done
这是我更改Debian当前目录中所有文件扩展名的方法。
rename "s/oldExtension/newExtension/" *.txt
(这是Perl rename命令,不是Perl 命令util-linux。请参见为什么Debian / Ubuntu上的重命名实用程序与其他发行版(例如CentOS)上的重命名实用程序不同?)
brew install rename并使其正常工作。
rename "s/oldExtension/newExtension/" **.txt
footxt.txt。改用它:unix.stackexchange.com/questions/19654/…–
rename 's/$/.txt/' *
一个简单的命令renamefromutil-linux,将为您完成此操作,它将所有匹配“ * .txt”的文件中所有出现的“ txt”替换为“ text”:
rename txt text *.txt
rename更改第一次出现的位置,因此最好使它发生变化rename .txt .text,但这仍然不能总是起作用(例如,将其重命名foo.txtx.bar.txt为foo.textx.bar.txt)。
rename命令实际上是perl-rename使用perl正则表达式的。为此,等效命令为:rename 's/.txt/.text/' *.txt。人们应该检查man rename他们的系统,以找出拥有的系统。
rename "s/oldExtension/newExtension/" *.txt
以上工作正常,但仅限于当前目录。请尝试以下命令,该命令对于子目录很灵活。它将.txt使用新扩展名重命名目录结构下的所有文件。
find . -name "*.txt" -exec rename 's/.txt$/.newext/' {} \;
rename可以处理多个文件作为参数,您可以使用+而不是\;如果有很多这样的文件来极大地加快处理速度
footxt.txt。改用它:unix.stackexchange.com/questions/19654/…–
基于@Prince John Wesley的答案,这是一个简单的bash脚本,用于将当前目录中文件的所有扩展名从ext1更改为ext2。还输出要重命名的文件的名称。
#!/bin/bash
for f in *.$1
do
[ -f "$f" ] && mv -v "$f" "${f%$1}$2"
done
示例用法(假设脚本的名称change-ext):
change-ext ext1 ext2
for...)替换为两行:shopt -s globstar和for f in **/*.$1。需要Bash 4+。
假设您的文件分散在各个目录中,假设dirx是您的父目录,则可以使用find执行此操作:
for f in `find /dirx -iname '*.txt' -type f -print`;do mv "$f" ${f%.txt}.text; done
当你
没有源文件的扩展名
而目标扩展名是.text,您可以通过以下方式进行操作-
for f in *; do mv -- "$f" "${f%.\*}.text"; done
for f in *.html; do mv -- "$f" "${f%.\*}.pug"; done