我有很多不同的文件夹,其中包含pdf
文件和其他扩展名。我想将所有pdf
文件复制到另一个目的地。但如果我用这样的 find 来做到这一点:
"${SEARCHDIR}" -iname "*.pdf" | xargs -d "\n" -I {} cp -r --backup=t {} "${OUTPUTFOLDER}/"
我将所有pdf
文件放在一个目的地,这对我来说太混乱了。因此,我想复制包括父目录在内的匹配文件,但是没有该目录中的不匹配文件。
输入:
user/search/test/sub
user/search/test/sub2
user/search/test/file.pdf
user/search/test/file.doc
user/search/test2/sub
user/search/test2/sub2/file2.pdf
user/search/test2/file3.pdf
user/search/test2/file.doc
应复制为
/destination/test/file.pdf
/destination/sub2/file2.pdf
/destination/test2/file3.pdf
编辑: 我不想复制整个路径。我不希望我的输出是这样的:
/destination/test/file.pdf
/destination/test2/sub2/file2.pdf
/destination/test2/file3.pdf
这个怎么做?
答案1
在 中zsh
,你可以这样做:
set -o extendedglob
for file ( $SEARCHDIR/**/*.(#i)pdf(ND^/) ) {
dest=$OUTPUTFOLDER/${file:t2}
mkdir -p -- $dest:h && cp --backup=t -- $file $dest
}
where${file:t2}
获取文件的两部分尾部,即文件名及其父目录的文件名。然后我们h
将该路径的开头创建为目录并将文件复制到那里。