在一个目录中,我有一堆
我该怎么做呢? 我使用Bash shell。
*.html
文件。我想把它们全部重命名为*.txt
。我该怎么做呢? 我使用Bash shell。
*.html
文件。我想把它们全部重命名为*.txt
。rename.pl 's/html/txt/' *.html
很遗憾,这不是一件容易的事情,需要一些表达式魔法才能实现可移植性。
for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done
如果你已经满意它所做的事情,就可以去掉回声。
编辑:对于这种特殊情况,basename
可能更易读,尽管 expr
在一般情况下更灵活。
.bashrc
或其他地方,然后在任何需要的地方使用它。change-ext() {
for file in *.$1; do mv "$file" "$(basename "$file" .$1).$2"; done
}
使用方法:
change-ext css scss
."$1"
两处都应该加上引号)。 - undefined简单易懂!
find . -iname *.html -exec mv {} "$(basename {} .html).text" \;
"$(basename {} .html).text"
会被shell扩展为{}.text
,这是错误的。 - undefined以下是我用来将 .edge
文件重命名为 .blade.php
的方法
for file in *.edge; do mv "$file" "$(basename "$file" .edge).blade.php"; done
我在我的.bashrc文件中编写了这段代码
alias find-ext='read -p "Path (dot for current): " p_path; read -p "Ext (unpunctured): " p_ext1; find $p_path -type f -name "*."$p_ext1'
alias rename-ext='read -p "Path (dot for current): " p_path; read -p "Ext (unpunctured): " p_ext1; read -p "Change by ext. (unpunctured): " p_ext2; echo -en "\nFound files:\n"; find $p_path -type f -name "*.$p_ext1"; find $p_path -type f -name "*.$p_ext1" -exec sh -c '\''mv "$1" "${1%.'\''$p_ext1'\''}.'\''$p_ext2'\''" '\'' _ {} \;; echo -en "\nChanged Files:\n"; find $p_path -type f -name "*.$p_ext2";'
这些命令的行为将会如下所示:
~$ find-text
Path (dot for current): example-files/
Ext (unpunctured): txt
example-files/file1.txt
example-files/file2.txt
~$ rename-text
Path (dot for current): ./example-files
Ext (unpunctured): txt
Change by ext. (unpunctured): mp3
Found files:
./example-files/file1.txt
./example-files/file1.txt
Changed Files:
./example-files/file1.mp3
./example-files/file1.mp3
~$
这里有一个解决方案,使用AWK。确保文件存在于工作目录中。否则,请cd到html文件所在的目录,然后执行以下命令:
for i in $(ls | grep .html); do j=$(echo $i | grep -oh "^\w*." | awk '{print $1"txt"}'); mv $i $j; done