我试图将某些文件重命名为另一个扩展名:

# mv  *.sqlite3_done *.sqlite3

但出现错误:

mv: target '*.sqlite3' is not a directory

为什么?

#1楼 票数:6

mv只能将多个文件移动到单个目录中; 它不能将每个人移动到不同的名称。 您可以改为在bash中循环:

for x in *.sqlite3_done; do
    mv "$x" "${x%_done}"
done

${x%_done}$x的末尾删除_done

#2楼 票数:2 已采纳

通配符扩展导致将多个名称传递给命令。 Shell认为您正在尝试将多个文件移动到*.sqlite3目录。

您需要使用一个循环:

for nam in *sqlite3_done
do
    newname=${nam%_done}
    mv $nam $newname
done

%_done说要从字符串中删除最后一次出现的_done

如果文件名中可能包含空格,则需要引用文件名。

#3楼 票数:0

最简单的方法是使用查找

find . -type f -name '*.sqlite3_done' -exec sh -c 'x="{}"; mv "$x" "${x%_done}"' \;

  ask by AngeloC translate from so

未解决问题?本站智能推荐:

1回复

使用Bash重命名和移动通配符文件

我正在尝试使用此bash脚本执行以下操作,但我没有遇到麻烦。 1)在/ usr / incoming /目录中找到每个扩展名为.mp3的文件 2)使用eyeD3剥离所有现有的ID3标签 3)使用eyeD3将标题标签“ NEW NAME”写回到文件中 4)使用mv将扩展名为.mp3
2回复

在“重命名”中使用通配符

我一直在使用rename命令批量重命名文件。 到目前为止,我有这样的文件: 并使用rename 2010.306.18.08.11.0000.BO. "" * rename 2010.306.18.08.11.0000.BO. "" * rename .. _. * rename .. _. *
1回复

如何在特定文件夹中使用bash脚本重命名文件

这是我正在使用的脚本,尚未完成工作 基本上我想将所有文件从一个文件夹复制到另一个文件夹,然后重命名所有文件,复制效果很好。 该文件的当前名称带有下划线(_),但我想重命名使用(-)破折号。 原始文件: name_appName_1.0_debug.apk 预期结果: name-a
4回复

在bash中使用动态名称重命名文件

我正在尝试使用动态名称重命名所有包含“名称”的文件。 因此,此文件“ NameSomething”应类似于“ SearchSomething”。 但是下面的脚本只是从文件名中删除“名称”。
1回复

在Linux中使用bash脚本查找和重命名多个文件

例如,在目录/home/hel/files/包含数以百计的文件和数百个目录。 应用程序将其输出文件保存在文件名中,并带有特殊字符。 我想在所有文件名中用下划线替换这些特殊字符。 例如-:"<>@ 我写了一个 bash 脚本,它只是重复一个命令来使用 Linux/Unix 'rename'
2回复

在bash中使用多个规则批量重命名文件

通过应用三个规则重命名与ls *.abc匹配的所有文件的最有效方法是什么: 应删除基本名称的最后 10 个字符(即mv "he'llo\\"world-FGhjklmno.abc" "helloworld.abc" ) 应转义原始文件名中的所有双引号以避免 bash 语法错误 应从新文件名中删除
1回复

在Bash中使用捕获组重命名

我想重命名该格式的几个文件 所有的格式 使用Bash。 我写了正则表达式(libpj[^-]*).* ,它应该在捕获组1中留下有趣的部分。所以我尝试使用参数替换Bash: 但是Bash给出了很多形式的错误 意味着正则表达式在某种程度上不匹配,即使我已经确认它与几个实用程序,特别
4回复

如何在bash脚本中重命名文件

我在/ media / user / docs下有一个文件夹集合(> = 50),具有以下命名约定: 我想编写一个bash脚本将这些文件夹重命名为以下格式: 如何使用重命名或任何其他Linux命令来实现? 我的工作环境是Ubuntu 14.04。 谢谢。