将一组文件重命名为每个文件中都存在的字符串

丹尼尔·卡普兰(Daniel Kaplan)

我有一组json文件。每个文件包含一个json对象,并且它们都具有相同的架构。我想将文件重命名为json中的一个字段。我怎样才能做到这一点?

我想出了这个解决方案:

find . -name '*.json' | xargs -i mv {} $(cat {} | jq '.billingAccountList[0]' | tr -d \").json

但这是行不通的,因为cat它试图解释{}。我希望xargs可以解释它。它给了我这个错误:

cat: {}: No such file or directory
文件火

使用循环逐个处理文件。

例如,使用while read

find . -name '*.json' | while read fname; do
    newname=$(jq -r '.billingAccountList[0]' "${fname}").json
    mv "${fname}" "${newname}"
done

for可能可以使用,但是它对文件名中的空格更为敏感:

for fname in $(find . -name '*.json'); do
    ... (same as above) ...

另请注意,由于原始路径已被剥离,因此您正在将文件移动到当前目录中,因此,如果要保留目录结构,请执行以下操作:

find . -name '*.json' | while read fname; do
    fdir=$(dirname "${fname}")
    newname=$(jq -r '.billingAccountList[0]' "${fname}").json
    mv "${fname}" "${fdir}/${newname}"
done

更新:使用jq -r@steeldriver建议。谢谢!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将文件重命名为文件名中的子字符串?

在Linux上将一组文件重命名为001、002 ...

python将列中的字符串重命名为指定的字符串

将文件重命名为已存在的文件名

无法将每个“文件”重命名为“ file.text”(使用xargs)

如何使用重命名命令使用句点和下划线将相似的字符串重命名为多个文件

将文件夹中的文件重命名为一个名称

将文件重命名为其BASE64

将多个文件重命名为其后缀

终端:将多个文件重命名为数字顺序

自动将.rdf文件重命名为.XML

如何将文件重命名为..(点点)?

将文件名从大写重命名为小写

将文件重命名为顺序编号

将文件重命名为子目录

Linux将文件重命名为dirname

TIBCO Spotfire 表达式:如何将一组嵌套列重命名为新名称

将文件名中的特殊字符重命名为下划线

单个命令将文件重命名为其哈希的前N个字符

将一种格式的文件重命名为另一种格式

是否可以使用Powershell或批处理文件将文件夹中的每个文件重命名为另一个名称?

帮助oneliner-创建随机文件,重命名为2个字符的文件名,并使用随机字符串填充

使用 PowerShell 将文件夹中的所有文件重命名为上次写入时间的每个文件

如何将长字符串值自动重命名为更具可读性的字符串?

将图像重命名为exif时间:创建唯一的文件名

如何将多个文件重命名为一个名称

将Visual Studio(2013)中的Proprogate文件重命名为GIT,就像GIT重命名一样?

如何通过批处理脚本将8字符文件重命名为9字符文件?

在Windows 10中,如何将文件重命名为包含带有变音符的字符的文件名?