在Unix中我有批量文件從一個文件夾複製到另一個他們在下面的表格具有自定義名稱的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
我該怎麼做到這一點?
在Unix中我有批量文件從一個文件夾複製到另一個他們在下面的表格具有自定義名稱的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
我該怎麼做到這一點?
dst_dir=~/tmp
f='FILE1_547804_550484_2013-12-19 21.15.32_913.pdf'
cp "$f" "$dst_dir/${f%_*-*-* *.*.*_*.pdf}.pdf"
您錯過了目標文件名末尾的'.pdf',它應該讀取'cp $ f $ dst_dir/$ {f%_ * - * - * \ *。*。* _ *。pdf}。 pdf「,但它是一個不錯的'bash'解決方案,+1。 – imp25
@ imp25你說得對,現在是固定的。 –
最簡單。謝謝你。其他解決方案也適用於所有人。你能告訴我你在上面做了什麼叫做這個技巧嗎? –
你的目錄下,試試這個:
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到你的同一個目錄。
感謝您的指導+1 –
但targetDir會去哪裏? –
@DevG'.... NF- = 2} $ 0 =「cp」o「/ path/to/dir /」$ 0「.pdf」'| sh' – Kent
您可以使用sed
編輯文件名,或者可能只是shell功能。這裏有一個例子sed
:
for i in *.pdf;
do
n=$(echo "${i}" | sed 's/^\(.\+\)\(\(_.\+\)\{2\}\)\(_.\+\)\{2\}\.pdf$/\1\2.pdf/');
mv "${i}" "destination/${n}"
done
感謝提供指導+1 –
讓我試試下面提到的所有方法,今天晚上回來......感謝您的指導! –