/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 loop'?
这适用于Autosys应用程序,其中jil包含一个命令,可以传递给运行bash的linux服务器的命令行。
我只能找到问题的每个部分的版本,但不能完全找到,我希望将它保留在这个jil的命令行中。除非绝对需要脚本。
答案 0 :(得分:4)
不需要循环,只需rename
和mv
即可执行此操作:
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