Shell 具有自定义名称的Unix批量文件拷贝

Shell 具有自定义名称的Unix批量文件拷贝,shell,unix,sh,Shell,Unix,Sh,在Unix中,我必须将大容量文件从一个文件夹复制到另一个文件夹。它们的格式如下 文件1_547804_550484_2013-12-19 21.15.32_913.pdf 文件2_518868_616944_2014-01-03 21.10.49_718.pdf 但在复制到目标时,您希望删除时间部分并按如下方式复制: 文件1_547804_550484.pdf 文件2_518868_616944.pdf 如何实现此目的?在您的目录下,尝试以下操作: dst_dir=~/tmp f='FILE1_

在Unix中,我必须将大容量文件从一个文件夹复制到另一个文件夹。它们的格式如下

文件1_547804_550484_2013-12-19 21.15.32_913.pdf

文件2_518868_616944_2014-01-03 21.10.49_718.pdf

但在复制到目标时,您希望删除时间部分并按如下方式复制:

文件1_547804_550484.pdf

文件2_518868_616944.pdf


如何实现此目的?

在您的目录下,尝试以下操作:

dst_dir=~/tmp
f='FILE1_547804_550484_2013-12-19 21.15.32_913.pdf'
cp "$f" "$dst_dir/${f%_*-*-* *.*.*_*.pdf}.pdf"
ls -1|awk -F_ -v OFS='_' '{o=$0;gsub(/ /,"\\ ",o);NF-=2}$0="cp "o " "$0".pdf"'|sh
举一个例子:(不带结尾的
| sh
来显示生成的命令)


您可以根据需要添加
targetDir
部分。此行未经修改,将cp发送到您的同一目录。

在您的目录下,尝试以下操作:

ls -1|awk -F_ -v OFS='_' '{o=$0;gsub(/ /,"\\ ",o);NF-=2}$0="cp "o " "$0".pdf"'|sh
举一个例子:(不带结尾的
| sh
来显示生成的命令)


您可以根据需要添加
targetDir
部分。这一行未经修改,将被复制到同一目录。

您可以使用
sed
编辑文件名,也可以仅使用shell功能。下面是一个使用
sed
的示例:

for i in *.pdf;
do
    n=$(echo "${i}" | sed 's/^\(.\+\)\(\(_.\+\)\{2\}\)\(_.\+\)\{2\}\.pdf$/\1\2.pdf/');
    mv "${i}" "destination/${n}"
done

您可以使用
sed
编辑文件名,也可以仅使用shell功能编辑文件名。下面是一个使用
sed
的示例:

for i in *.pdf;
do
    n=$(echo "${i}" | sed 's/^\(.\+\)\(\(_.\+\)\{2\}\)\(_.\+\)\{2\}\.pdf$/\1\2.pdf/');
    mv "${i}" "destination/${n}"
done

您缺少目标文件名末尾的
.pdf
,它应该是
cp$f$dst\u dir/${f%\u*-*-*-*\*.*..*..*.\ u*.pdf}.pdf
但它是一个很好的
bash
解决方案,+1。谢谢你。Rest解决方案也适用于所有so+1。你能告诉我你在上面所做的这项技术叫什么吗?@DevG它叫什么。你缺少目标文件名末尾的
.pdf
,它应该是
cp$f$dst\u dir/${f%\u*-*-*-*\*..*.*.*.pdf}.pdf
但它是一个很好的
bash
解决方案,+1。谢谢你。Rest解决方案也适用于所有so+1。你能告诉我你在上面所做的这个技巧叫什么吗?@DevG。让我试试下面提到的所有方法,今天晚上再来……谢谢你的指导!让我试试下面提到的所有方法,今天晚上再来……谢谢你的指导!感谢指导+1但targetDir将去哪里?感谢指导+1但targetDir将去哪里?感谢指导+1感谢指导+1感谢指导+1