我想将文件扩展名从更改*.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/' *
一个简单的命令rename
fromutil-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