gpt4 book ai didi

linux - 如何在使用 bash 更改文件名和扩展名的同时将多个文件移动到一个目录?

转载 作者:IT王子 更新时间:2023-10-29 01:20:17 26 4
gpt4 key购买 nike

/opt/dir/ABC/ 中有多个名为 allfile_123-abc allfile_123-def allfile_123-ghi allfile_123-xxx 的文件。

我需要将文件命名为 new_name-abc.pgp new_name-def.pgp new_name-ghi.pgp new_name-xxx.pgp 然后移动到 /usr/tst/output

for file in /opt/dir/ABC/allfile_123* ; 
do mv $file /usr/tst/output/"$file.pgp";
rename allfile_123 new_name /usr/tst/output/*.pgp ; done

我知道以上内容不起作用,因为 $file =/opt/dir/ABC/allfile_123*。是否有可能使它工作,或者它是一个不同的命令而不是“for 循环”?

这适用于 Autosys 应用程序,其中 jil 包含要传递到运行 bash 的 linux 服务器命令行的命令。

我只能找到问题每个部分的版本,但不能全部找到,我希望将它保留在这个 jil 的命令行中。除非绝对需要脚本。

最佳答案

无需循环,只需使用 renamemv 即可:

rename -v 's/$/.pgp/' /opt/dir/ABC/allfile_123*
rename -v s/allfile_123/new_name/ /opt/dir/ABC/allfile_123*
mv /opt/dir/ABC/new_name* /usr/tst/output/

但我不确定您使用的rename 是否与我的相同。然而,由于您要执行的替换非常简单,在纯 Bash 中很容易做到:

for file in /opt/dir/ABC/allfile_123*; do
newname=new_name${file##*allfile_123}.gpg
mv "$file" /usr/tst/output/"$newname"
done

如果你想把它写在一行上:

for file in /opt/dir/ABC/allfile_123*; do newname=new_name${file##*allfile_123}.gpg; mv "$file" /usr/tst/output/"$newname"; done

关于linux - 如何在使用 bash 更改文件名和扩展名的同时将多个文件移动到一个目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45623681/

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