同じ拡張子を持つ別の名前のファイルを完全修飾ファイル名を持つすべてのファイルにコピーする方法は?

同じ拡張子を持つ別の名前のファイルを完全修飾ファイル名を持つすべてのファイルにコピーする方法は?

たとえば、次のように異なるサブディレクトリに異なる名前を持つファイルがあります。

a/apple.txt
b/orange.txt
c/pear.txt

最終結果が次のように統一された名前(fruit.txt)を使用してそのディレクトリにどのようにコピーしますか?

a/apple.txt
a/fruit.txt
b/orange.txt
b/fruit.txt
c/pear.txt
c/fruit.txt

(a/apple.txt と a/fruit.txt ファイルの内容は同じでなければなりません)

私の考えは次のとおりです。

find . -name "*.txt" -exec cp {} fruit.txt \;

しかし、これがFruit.txtを対応するすべてのサブディレクトリに入れるのか、それとも現在のディレクトリに入れるのかはわかりません。

ベストアンサー1

注文、

find . -name "*.txt" -exec cp {} fruit.txt \;

現在のディレクトリ内または下に.txtファイル名サフィックスがあるすべてのファイル(およびディレクトリなど)を正しく見つけて、すべてコピーします。fruit.txt現在の目次。

あなたが望むのは、元のファイルと同じディレクトリにコピーすることです。定期的なfruit.txtファイルを削除し、すでに存在する名前を避けてください。

find . -type f -name '*.txt' ! -name fruit.txt -execdir cp -- {} fruit.txt \;

非標準(ただし一般的に使用される)-execdir述語を使用している場合、使用するコマンドは見つかったファイルのディレクトリ内で実行されます。これは、上記のコードがファイルを見つけたファイルと同じディレクトリcpにコピーすることを意味します。fruit.txt

必要な効果に応じて、ファイルのコピーの代わりにシンボリックリンクを使用できます。

find . -type f -name '*.txt' ! -name fruit.txt -execdir ln -sf -- {} fruit.txt \;

おすすめ記事