2013-05-31 118 views
0

我有一堆文件在單獨的文件夾中,具有相同的名稱。遞歸複製文件(具有相同名稱)到一個文件夾

例如,

/path/to/your/directory/1/results.pdf 
/path/to/your/directory/2/results.pdf 

但是,我想將它們複製到一個目錄:

/path/to/your/directory/results/ 

,所以我必須:

/path/to/your/directory/results/results-1.pdf 
/path/to/your/directory/results/results-2.pdf 

麻煩是t我寫的腳本,文件將相互覆蓋。

感謝

+2

那麼,你想要腳本來做什麼呢? – ruakh

+0

實現一個簡單的計數器,爲每個文件基名添加一個數字後綴。所以你最終得到的結果-001.pdf,results-002.pdf,...這裏的問題是什麼? – arkascha

+1

劇本是怎樣的?通常你可以檢查目標文件是否存在,如果是,你可以重命名它(附加一個數字等)。 – Matt

回答

0

也許這樣的事情會幫助你 find . -type f -exec sh -c 'if [ ! -e ../aaa/{} ]; then cp {} ../aaa/;else i=0; while [ -e ../aaa/{}_${i} ]; do ((i++)); done; cp {} ../aaa/{}_${i}; fi' \;

所以基本上是從當前目錄搜索,而對於任何文件,它會複製到../aaa/目錄,如果已經有任何這樣的文件存在,它將追加_0_1或......取其任何一個使其成爲uniq,理想情況下它應該被寫入腳本中,並且find -exec應該爲腳本調用,如果需要進一步優化,但我認爲這一行應該足夠了

0

我這樣做定期

#!/usr/bin/sh 

for i in `find <source_dir_path> -type f` 
do 
new=`echo $i|nawk -F"/" '{split($NF,a,".");print "<target_dir_path>"a[1]"_"$(NF-1)"."a[2]}'` 
cp $i $new 
done 
+0

在目錄的每個子文件夾中有幾個級別,我有文件spm_2013Jun05.ps.I一直在試圖將文件移動到/ home/alistair /文檔/ spmresults /。但只有兩個同名文件名已被複制: -/home/alistair/Documents/spmresults/spm_2013Jun05.ps -/home/alistair/Documents/spmresults/spm_2013Jun05_1.ps for i in $(find ./名稱spm_2013May30.ps -type f) do new ='echo $ i | nawk -F「/」'{split($ NF,a,「。」);打印「/ home/alistair/Documents/spmresults /」a [1]「_」$(NF-1)「。」a [2]}'' cp $ i $ new done – ap123

0

rename the files in placeresult-0001.pdfresult-0002.pdf等,這樣你就可以沒有任何問題移動:

rename --no-act --verbose 's/.*/sprintf "result-%04d.pdf", ++$main::Mad/e' /path/to/your/directory/results/*/result.pdf 

刪除--no-act如果你滿意的結果。

相關問題