gpt4 book ai didi

bash - 重命名多个文件更改扩展名和部分字符串

转载 作者:行者123 更新时间:2023-11-29 09:39:15 25 4
gpt4 key购买 nike

我有目录中的 *.new 文件列表。这些文件的名称中包含 D1,将被替换为 D2,并且还必须将扩展名从 .new 删除为空

hello_world_D1_122.txt.new -------> hello_world_D2_122.txt

我试过的是

ls -slt | grep -iE "*.new$" | awk -F " " '{print $10}' | xargs -I {} mv {} "echo {} | sed -e 's/.D1./.D2./g ; s/.new//g'"

此命令未产生所需的输出。上面命令的输出是

mv: rename hello_world_D1_122.txt.new to echo hello_world_D1_122.txt.new | sed -e 's/D1/D2/g ; s/.new//g': No such file or directory

最佳答案

为什么一直围绕使用一堆 shell 工具的方式,你可以使用内置的 bash 工具,使用参数扩展语法进行字符串操作

for file in *.new; do 
[ -f "$file" ] || continue
temp="${file%*.new}"
mv -- "${file}" "${temp/D1/D2}"
done

部分 "${file%*.new}" 从文件名和 "${temp/D1/D2}"D1 替换为 D2

我不知道为什么坚持使用 GNU xargs,但您可以使用这种不可读的方式来实现它。使用printf 列出以null 分隔符的文件并使用xargs -0 以null 为分隔符读取,

printf '%s\0' *.new | xargs -0 -r -I {} sh -c 'temp="${0%*.new}"; mv -- "${0}" "${temp/D1/D2}"' {}

关于bash - 重命名多个文件更改扩展名和部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47936724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com