Linuxのコマンドラインで、あるディレクトリ(とそのサブディレクトリ)から別のディレクトリに(非常に大きな).txt
ファイルのセットをコピーしたいと思います。
ディレクトリ構造をそのままにしておく必要があり、.txt
で終わるファイル以外のファイルは無視する必要があります。
cd /source/path
find -type f -name \*.txt -exec install -D {} /dest/path/{} \;
他のアプローチ
find . -name '*.txt' -exec rsync -R {} path/to/dext \;
私のために働いた最も簡単な方法:
cp --parents -R jobs/**/*.xml ./backup/
1つのキャッチは、「親パス」が正しいように、「目的の」ディレクトリに移動する必要があることです。
また、bashで再帰グロブを有効にしたことを確認してください。
shopt -s globstar
私はmacOSで同じことをやろうとしていました、しかしオプションのどれも本当に私のために働きませんでした。私はditto
を発見するまで。
私はたくさんの.wavファイルをコピーしなければならず、そしてそれはビデオファイルをスキップしなければならなかった...それで、これが私が思いついたものです:
find . -type f -iname "*.wav" -ls -exec ditto {} /destination/folder/{} \;
find .
- 現在のフォルダで検索を実行します。始める前に必ずcd /source/folder
を付けてください
-type f
- ファイルだけを探すように指定します
-iname "*.wav"
- 大文字と小文字を区別しない* .wavを探すように指示します-ls
- 作業中のファイルを表示します。それ以外の場合は何も表示されません。-exec ditto {} /destination/folder/{} \;
- 同じディレクトリツリーを持つファイルをコピーおよび作成するすべての作業を行います。あなたが最初にそれをコピーしてどうですか?
cp -r /old/folder /new/folder
その後、新しいフォルダに移動して実行します
find . -type f ! -iname "*.txt" -delete
あるいは単に
cp -r /old/folder /new/folder && find . -type f ! -iname "*.txt" -delete
編集:あなたは1つのコマンドをフィルタリングする必要があります(私のシステムはcpio
コマンドを持っていないので私はこれをテストしていません!)。ここで私はそれを見つけた場所です: http://www.gnu.org/software/findutils/manual/html_mono/find.html#Copying-A-Subset-of-Files
find . -name "*.txt" -print0 |
cpio -pmd0 /dest-dir
最初にテストしてください。まだ試していません。誰かが検証すれば、それは素晴らしいことです。
ディレクトリに移動します。
find . -regex '<regexp_to_get_directories_and_files_you_want>' | xargs -i cp -r --parents {} path/to/destination
正規表現を管理すれば、もう少し簡単で強力です。