web-dev-qa-db-ja.com

「ただのファイル」を再帰的にコピーする方法

Folder0とその中のサブフォルダーとファイルにこの構造があるとします。

   folder0
      subfolder01
        file011
        file012
      subfolder02
        file021
      file01
      file02

メインフォルダー内のすべてのファイルをコピーしたいfolder0他のどこかに、すべてのファイルが1つのディレクトリにあるように?どうやってやるの?使った

cp --recursive folder0address targetfolderaddress

しかし、サブフォルダーはターゲットフォルダーにコピーされました。フォルダーではなく、ディレクトリーとサブディレクトリー内のすべてのファイルが必要です。ターゲットフォルダで以下のようなものを意味します:

targetfolder
  file011
  file012
  file021
  file01
  file02
5
SirSaleh

findを使用:

find folder0 -type f -exec cp {} targetfolder \;

GNU coreutilsを使用すると、より効率的に実行できます。

find folder0 -type f -exec cp -t targetfolder {} +

前者のバージョンはコピーされたファイルごとにcpを実行しますが、後者はcpを1回だけ実行します。

8
Satō Katsura

Zshのおかげで ** for recursive globbing and glob qualifier . 通常のファイルのみに一致させるには:

cp -p folder0/**/*(.) targetfolder

またはxargsを使用する

 find folder0 -type f | xargs -I {} cp -v {} targetfolder;

何が起こっているかを表示するには、-vを使用します。

0
infoclogged