递归地将文件(具有相同名称)复制到一个文件夹

时间:2013-05-31 06:04:52

标签: shell unix

我有一堆文件在不同的文件夹中,它们具有相同的名称。

例如,

/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  

问题在于我写的脚本,文件会互相覆盖。

由于

3 个答案:

答案 0 :(得分:1)

我经常这样做

#!/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

答案 1 :(得分: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,理想情况下它应该用脚本编写,如果需要进一步细化,_1应该调用脚本,但我认为这个内容应该足够了

答案 2 :(得分:0)

result-0001.pdf result-0002.pdfrename --no-act --verbose 's/.*/sprintf "result-%04d.pdf", ++$main::Mad/e' /path/to/your/directory/results/*/result.pdf 等,以便您可以毫无问题地移动它们:

--no-act

如果您对结果感到满意,请移除{{1}}。