如何查找文件并复制其目录而不复制同一目录中的其他文件?

如何查找文件并复制其目录而不复制同一目录中的其他文件?

我有很多不同的文件夹,其中包含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将该路径的开头创建为目录并将文件复制到那里。

相关内容