在Unix中,我必须将批量文件从一个文件夹复制到另一个文件夹,它们以下面的形式出现。
FILE1 1_547804_550484_2013年-12-19 21.15.32_913.pdf
文件2_518868_616944_2014-01-03 21.10.49_718.pdf
但是,当复制到目标时,希望删除时间部分并按以下方式复制:
FILE1_547804_550484.pdf
FILE2_518868_616944.pdf
我怎样才能做到这一点?
发布于 2014-01-06 15:32:27
dst_dir=~/tmp
f='FILE1_547804_550484_2013-12-19 21.15.32_913.pdf'
cp "$f" "$dst_dir/${f%_*-*-* *.*.*_*.pdf}.pdf"发布于 2014-01-06 15:38:56
在您的目录下,尝试如下:
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到您的同一个目录。
发布于 2014-01-06 15:42:32
您可以使用sed编辑文件名,也可能只使用shell特性。下面是一个使用sed的示例
for i in *.pdf;
do
n=$(echo "${i}" | sed 's/^\(.\+\)\(\(_.\+\)\{2\}\)\(_.\+\)\{2\}\.pdf$/\1\2.pdf/');
mv "${i}" "destination/${n}"
donehttps://stackoverflow.com/questions/20953243
复制相似问题