ファイルを見つけてそのディレクトリをコピーする方法は?

ファイルを見つけてそのディレクトリをコピーする方法は?

次のコマンドを使用してファイルを見つけて別の場所にコピーします。

find /search/ -name file.txt -exec cp -Rp {} /destination \;

親ディレクトリのすべてのファイルとサブディレクトリをコピーする方法はfile.txt

はい、

/search/test/sub
/search/test/sub2
/search/test/file.txt
/search/test/file.doc

次のようにコピーする必要があります。

/destination/sub
/destination/sub2
/destination/file.txt
/destination/file.doc

ベストアンサー1

(標準述語ではなく、頻繁に実装されている)を使用すると、その-execdirユーティリティはファイルがあるディレクトリで実行されます。

これはあなたができることを意味します

find /search -name file.txt -execdir cp -Rp . /destination \;

いいえ-execdir:

find /search -name file.txt -exec sh -c 'cp -Rp "${1%/*}/." /destination' sh {} \;

または、

find /search -name file.txt -exec sh -c 'cd "${1%/*}" && cp -Rp . /destination' sh {} \;

最後の2つの亜種は、見つかった各ファイルに対して短いインラインスクリプトを実行します。スクリプトはファイルのパス名を最初の引数(in)として使用し(標準引数の置き換え)を使用して、パス名$1からファイル名を削除します。次に、最初のバリエーションと同じコマンドを${1%/*}適用します。cp-execdir

これを実行するコードは、最上位のバリエーションが実際に行うことをよりcd忠実にエミュレートします-execdirが、中間バリアントはパスの.末尾にあるソースディレクトリを参照してディレクトリ変更をバイパスします。

おすすめ記事