同じディレクトリにある別のファイルをコピーせずにファイルを見つけ、そのディレクトリをコピーする方法は?

同じディレクトリにある別のファイルをコピーせずにファイルを見つけ、そのディレクトリをコピーする方法は?

pdfファイルやその他の拡張子を含むさまざまなフォルダがあります。pdfすべてのファイルを別の宛先にコピーしたいです。しかし、次のようにfindで実行すると:

"${SEARCHDIR}" -iname "*.pdf" | xargs -d "\n" -I {} cp -r --backup=t {} "${OUTPUTFOLDER}/"

すべてのファイルを1つの宛先に保存しましたが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
}

ここでは${file:t2}、ファイルの2つの部分で構成されるテール、ファイル名、および親ディレクトリのファイル名を取得します。次に、hそのパスの先頭をディレクトリにし、そこにファイルをコピーします。

おすすめ記事