ご存知かもしれませんが、「cp」 は、ファイルとディレクトリをコピーするためのLinuxのコマンドラインプログラムです。 「cp」のシンプルで最も一般的な使用法 は次のとおりです:
$ cp file1 file2 file3... fileN target_folder/
上記のコマンドは、「空」だけでなくファイルに対しても機能することに注意してください。 フォルダ。ファイルまたはサブフォルダーのいずれかのコンテンツを含むフォルダーでは機能しません。
このようなフォルダをコピーするには、'-r'
を指定します。 (再帰的)フラグ。
$ cp -r folder1/ folder2/ file1 file2 target_folder/
再帰的コピーとは、フォルダの下にあるフォルダ構造全体、つまり、サブフォルダとその中のファイル、サブフォルダ内のサブフォルダとその中のファイルなどがコピーされることを意味します。
これによりすべてのファイルがコピーされ、「cp」内に方法はありません。 特定のパラメータに基づいて一部のファイルを除外するコマンド。たとえば、ユーザーは、階層の最下位にあるサブフォルダー内のMP3(オーディオ)ファイルを除いて、すべてのファイルを再帰的にコピーしたい場合があります。
特定のファイル拡張子を除くすべてのファイルを検索
これを実現するために、findコマンドを使用します。これは、ファイルまたはフォルダーのパラメーター(ファイル名、拡張子、サイズなど)に基づいてLinuxでファイルおよびフォルダーを検索するために使用されるコマンドツールです。
同様に、検索コマンドで除外するファイルを指定して、ファイルを検索する方法があります。 。 findを使用して特定の拡張子のファイルを検索するための構文 は:
$ find <folder_to_search> -name '*.<extension>'
たとえば、現在のフォルダ内のすべてのMP3ファイルを再帰的に検索するには:
$ find . -name "*.mp3"

ここで、MP3ファイルを除く、フォルダとサブフォルダ内のすべてのファイルを検索するには、「否定」を使用します。 検索の演算子 :
$ find . ! -name "*.mp3"

これで、MP3ファイル以外のすべてが表示されていることがわかります。ただし、この出力は後で「cp」に入力されるため、ファイルのみを表示する必要があります。 。現在、ファイルとフォルダの両方が表示されています(例:「temp1/」 )、同じファイルの繰り返しコピーにつながります。
出力からフォルダを削除するには、引数'-type f'
を使用するだけです。 。ここで'f'
ファイルを表します。
$ find . ! -name '*.mp3' -type f

これで、フォルダ「test」内に再帰的に取得されたファイルだけができました。 。これで、この出力を「cp」コマンドにパイプ処理できます。 。
ファイルを再帰的にコピーするときに特定のファイル拡張子を除外する
これを行うには、「xargs」を使用します 「cp」を作成するコマンド 「検索」の出力を検討してください その引数として。また、'-t'
を使用します ターゲットディレクトリを指定するフラグ。これがないと、プログラムは「検索」の出力を考慮します。 ターゲットディレクトリとして。
$ find <folder_to_search> ! -name '*.<extension>' -type f | xargs cp -t <target_directory>
実際のコマンド。
$ find . ! -name '*.mp3' -type f | xargs cp -t Misc/

したがって、“.mp3”
を除いて、再帰的に検出されたすべてのファイル ファイルがフォルダ「その他」にコピーされました 。
結論
この記事では、特定の拡張子のファイルを除外しながら、Linuxでファイルを再帰的にコピーする方法を学びました。また、特定の拡張子のファイルを再帰的にコピーする方法も確認してください。
ご質問やご意見がございましたら、下のコメント欄でお知らせください。