少し前に、特定の種類のファイルをあるディレクトリから別のディレクトリにコピーする方法を学びました。 Linuxでは。今日は同じことをしますが、ディレクトリ構造も保持します。この簡単なチュートリアルでは、Linuxでディレクトリ構造を維持しながら、特定のファイルタイプをコピーする方法について説明します。ここでは、これを行うための2つの異なる方法を示しました。自分に合ったものを選んでください。
Linuxでディレクトリ構造を維持しながら特定のファイルタイプをコピーする
このシナリオを想像してください。
"Linux"という名前のディレクトリがあります さまざまなサブディレクトリに保存されたさまざまな種類のファイルを使用します。次のディレクトリ構造を見てください。
$ tree Linux/ Linux/ ├── dir1 │ ├── English │ │ └── Kina - Can We Kiss Forever.mp3 │ ├── Instrumental │ │ └── Chill Study Beats.mp3 │ └── Tamil │ ├── Kannan Vanthu.mp3 │ └── yarenna.mp3 ├── dir2 │ ├── file.docx │ └── Raja Raja Chozan Naan.mp3 ├── dir3 │ ├── Bamboo Flute - Meditation - Healing - Sleep - Zen.mp3 │ └── pic.jpg └── dir4 ├── Aaruyirae.mp3 └── video.mp4 7 directories, 10 files
ツリーコマンドを使用してディレクトリの内容を一覧表示する
上記のディレクトリ構造にあるように、 Linux ディレクトリには、 dir1という4つのサブディレクトリがあります。 、 dir2 、 dir3 およびdir4 。 mp3 ファイルは4つのサブディレクトリすべてに散在しています。今、私はすべての mp3をコピーしたいと思います "ostechnix"という名前の別のディレクトリへのファイル また、ターゲットディレクトリに同じディレクトリ構造を維持したい。
まず、「find」コマンドを使用してこれを行う方法を確認します。
方法1-「find」および「cp」または「cpio」コマンドを使用する
ソースディレクトリに移動します:
$ cd Linux/
そして、「find」コマンドを使用してすべてのmp3ファイルタイプをコピーします:
$ find . -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;
上記のコマンドを分解して、各オプションの機能を見てみましょう。
- 検索 –Unixライクなシステムでファイルとフォルダを検索するコマンド。
- ドット (。)-現在のディレクトリからコンテンツをコピーすることを表します。
- -iname‘* .mp3’ –拡張子.mp3に一致するファイルを検索します。
- -exec cp –「cp」コマンドを実行して、ファイルをソースディレクトリから宛先ディレクトリにコピーします。
- -親 -必要に応じて、親ディレクトリ構造を保持するために中間の親ディレクトリを作成します。
- \ {\} –「find」コマンドで見つかったファイルのファイル名に自動的に置き換えられます。また、一部の「検索」コマンドバージョンでは、中括弧をエスケープして、シェルによる拡張から中括弧を保護します。 {}を使用することもできます エスケープ文字なし。
- 〜/ ostechnix –一致するファイルを保存するターゲットディレクトリ。
- \; –実行するコマンドが完了し、次の一致時にコマンドを再度実行することを示します。
このコマンドは、すべてのmp3タイプのファイルを検索して〜/ Linuxディレクトリから〜/ostechnixディレクトリにコピーします。また、ターゲットディレクトリに同じディレクトリ構造を保持します。
以下のように両方の場所で「tree」コマンドを使用して確認できます。
Linuxでtreeコマンドを使用してディレクトリの内容を一覧表示する
上記の出力からわかるように、宛先ディレクトリにはmp3ファイルのみがあり、そのディレクトリ構造はソースディレクトリと同じです。
他の場所からこれを行う場合は、以下のようにソースディレクトリのフルパスを指定します。
$ find ~/Linux -name '*.mp3' -exec cp --parents \{\} ~/ostechnix \;
このコマンドは、 Linux /
Linuxでディレクトリ構造を維持しながら特定のファイルタイプをコピーする
-親の場合 オプションが機能しない場合は、findコマンドを cpioと組み合わせることができます ディレクトリ構造を保持したままファイルをコピーするコマンド。
$ find . -name '*.mp3' | cpio -pdm ~/ostechnix
ここで
- cpio -アーカイブとの間でファイルをコピーするコマンド。
- -p -標準入力からファイル名のリストを読み取り、指定されたディレクトリにコピーします。
- -d -必要に応じてディレクトリを作成します。
- -m -ファイルの変更時間を維持します。
詳細については、manページを参照してください。
$ man find
$ man cp
$ man cpio
推奨される読み物:
- 特定のフォルダにある同様の種類のファイルを自動的に整理する方法
方法2-Rsyncを使用する
Rsync ローカルおよびリモートシステムとの間で使用される強力なツールです。親ディレクトリ構造を維持したまま、特定の種類のファイルをあるディレクトリから別のディレクトリにコピーするには、次のコマンドを実行します。
$ rsync -a -m --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
または、
$ rsync -a --prune-empty-dirs --include '*/' --include '*.mp3' --exclude '*' ~/Linux/ ~/ostechnix
ここで
- rsync -リモート(およびローカル)ファイルコピーツール。
- -a -ほとんどすべて(シンボリックリンク、変更日、ファイルのアクセス許可、所有者などを含む)を保持するアーカイブモード
- -m、-prune-empty-dirs -ソースツリーから空のディレクトリを削除します。空のディレクトリを含める場合は、上記のコマンドからこのオプションを削除してください。
- -include ="* /" --include ="*。mp3"--exclude="*" -特定のファイルのみを含めるには、最初にそれらの特定のファイルを含めてから、他のすべてのファイルを除外する必要があります。この例では、*。mp3ファイルを含め、それ以外はすべて除外しています。
- 〜/ Linux -ソースディレクトリ。
- 〜/ ostechnix -宛先ディレクトリ。
出力例:
LinuxでRsyncを使用してディレクトリ構造を維持しながら特定のファイルタイプをコピーする
詳細については、manページを参照してください。
$ man rsync
これがお役に立てば幸いです。