3

我对 linux 的使用非常陌生,也许这是我第一次使用,所以我希望能提供一些详细的帮助。我的服务器(Linux)上的多个目录中有 500 多个文件我想使用 bash 脚本将它们的扩展名更改为 .xml 我使用了很多代码,但它们都没有工作我使用的一些代码:

for file in *.txt
do
mv ${file} ${file/.txt}/.xml
done 

或者

for file in *.*
do
mv ${file} ${file/.*}/.xml
done

我不知道第二个是否是有效代码我试图更改 txt 扩展名,因为提示说没有这样的文件 '.txt'

我希望有一些好的帮助谢谢

4

5 回答 5

8

解释

  1. 对于递归,您需要 Bash>=4并启用**(即globstar);
  2. 首先,我使用参数扩展来删除字符串.txt,它必须锚定在文件名(%)的末尾:
  3. 将模式(纯单词或 glob)# 锚定到开头,
  4. 并将其%锚定到最后。
  5. 然后我附加新的扩展名.xml
  6. 文件名要格外小心,你应该总是引用参数扩展

代码

这应该在Bash(请注意,我只有echo旧/新文件名,实际重命名文件,使用mv代替echo):

shopt -s globstar # enable ** globstar/recursivity
for i in **/*.txt; do
    [[ -d "$i" ]] && continue; # skip directories
    echo "$i" "${i/%.txt}.xml";
done
于 2013-04-05T08:59:22.337 回答
2

如果它是一个或两个子目录的问题,您可以使用 rename 命令:

rename .txt .xml *.txt

这会将执行命令的目录中的所有 .txt 文件重命名为 .xml 文件。

于 2013-04-05T09:18:57.783 回答
1

我想将“file.txt”重命名为“file.jpg.txt”,使用重命名easy peezy:

重命名 's/.txt$/.jpg.txt/' *.txt

man rename 会告诉你你需要知道的一切。

爱上 Linux,一切都有一个工具 :-)

于 2014-12-15T03:15:58.970 回答
1

如果所有文件都在同一目录中,则可以使用单个命令完成。例如要将所有jpg文件转换为png,转到相关目录位置然后使用命令

重命名 .jpg .png *

于 2013-09-05T10:29:57.317 回答
-2

传递 dir 路径的命令行参数

#!/bin/sh
cd $1
names_1=`ls`
for file in ${names_1}
do
mv ${file} ${file}.jpg
done
于 2014-01-15T10:43:36.230 回答