在Unix中,我必须将批量文件从一个文件夹复制到另一个文件夹
FILE1_547804_550484_2013-12-19 21.15.32_913.pdf
FILE2_518868_616944_2014-01-03 21.10.49_718.pdf
但复制到目的地时想要删除时间部分并复制如下:
FILE1_547804_550484.pdf
FILE2_518868_616944.pdf
我怎样才能做到这一点?
答案 0 :(得分:4)
dst_dir=~/tmp
f='FILE1_547804_550484_2013-12-19 21.15.32_913.pdf'
cp "$f" "$dst_dir/${f%_*-*-* *.*.*_*.pdf}.pdf"
答案 1 :(得分:1)
在您的目录下,试试这个:
ls -1|awk -F_ -v OFS='_' '{o=$0;gsub(/ /,"\\ ",o);NF-=2}$0="cp "o " "$0".pdf"'|sh
举个例子:(没有结尾|sh
来显示生成的命令)
echo 'FILE1_547804_550484_2013-12-19 21.15.32_913.pdf'|awk -F_ -v OFS='_' '{o=$0;gsub(/ /,"\\ ",o);NF-=2}$0="cp "o " "$0".pdf"'
cp FILE1_547804_550484_2013-12-19\ 21.15.32_913.pdf FILE1_547804_550484.pdf
您可以根据需要添加targetDir
部分。这行没有修改,将cp到你的同一目录。
答案 2 :(得分:1)
您可以使用sed
或可能只是shell功能编辑文件名。以下是sed
的示例:
for i in *.pdf;
do
n=$(echo "${i}" | sed 's/^\(.\+\)\(\(_.\+\)\{2\}\)\(_.\+\)\{2\}\.pdf$/\1\2.pdf/');
mv "${i}" "destination/${n}"
done