Linuxであるdir1
ディレクトリ()から別のディレクトリ()にほとんどの(すべてではない)ファイルを選択的にコピーする方法は?dir2
*.c
ファイル*.txt
をにコピーしたくありませんdir2
。
オンラインマニュアルページはcp
私には役に立ちません。
答え1
find
eboixのコマンド(スペースによって中断されるため、最後に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
bash
extglobで実行できる操作の詳細については、マニュアルページを参照してください。これは再帰的ではないため、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にコピーします。