あるディレクトリから別のディレクトリにファイルを選択的にコピーする方法は?

あるディレクトリから別のディレクトリにファイルを選択的にコピーする方法は?

Linuxであるdir1ディレクトリ()から別のディレクトリ()にほとんどの(すべてではない)ファイルを選択的にコピーする方法は?dir2

*.cファイル*.txtをにコピーしたくありませんdir2

オンラインマニュアルページはcp私には役に立ちません。

答え1

findeboixのコマンド(スペースによって中断されるため、最後に1つまたは2つのより安全な方法を追加します)に加えて、次のものをbash使用できますextglob

# turn extglob on
shopt -s extglob 
# move everything but the files matching the pattern
mv dir1/!(*.c) -t dir2
# If you want to exclude more patterns, add a pipe between them:
mv dir1/!(*.c|*.txt) -t dir2

bashextglobで実行できる操作の詳細については、マニュアルページを参照してください。これは再帰的ではないため、dir1サブディレクトリではなくファイルのみが直接移動されます。このfind方法は再帰的です。


より安全なfindコマンド:

find dir1 ! -name '*.c' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' -exec mv -t dir2 {} +

より多くのパターンを見るには、もっと! -nameドアを追加してください。

find dir1 ! -name '*.c' ! -name '*.txt' -print0 | xargs -0 mv -t dir2
find dir1 ! -name '*.c' ! -name '*.txt' -exec mv -t dir2 {} +

答え2

この試み:

find ./ ! -name '*.c' | xargs -i cp {} dest_dir

答え3

dir1 では、次のコマンドを使用できます。

CPls|egrep -v .txt\|.cディレクトリ2

ls | egrep -v .txt \ | .cセクションには、名前に.cと.txtが含まれていないファイルが一覧表示されます。 cpはそれをdir2にコピーします。

関連情報