たとえば、ディレクトリにファイルを含めることができます
12_foo9.dat
34foo32.txt
24foobar.png
997_bar.txt
また、ファイル名に「foo」が含まれるファイルを別のディレクトリにコピーして、最初の3つのファイルが含まれるが、4番目のファイルは含まれないようにします。
私は周りを見回しましたが、これを行う方法を見つけていません。ディレクトリには非常に多くのファイルがありますが、コピーする必要があるのは1%程度です。
ありがとう
$ mkdir NEWDIR
$ touch foo_file file_foo file_foo_file
$ ls
NEWDIR file_foo file_foo_file foo_file
$ cp -v *foo NEWDIR/
file_foo -> NEWDIR/file_foo
$ cp -v foo* NEWDIR/
foo_file -> NEWDIR/foo_file
$ cp -v *foo* NEWDIR/
file_foo -> NEWDIR/file_foo
file_foo_file -> NEWDIR/file_foo_file
foo_file -> NEWDIR/foo_file
$ ls NEWDIR/
file_foo file_foo_file foo_file
このステートメントを試してください:cp *foo* /newdir
cp *foo* /path/to/separate_directory
最初に含まれるファイルを検証する場合は、次を使用します。
ls *foo*
これにより、一致するファイルが確認され、cpコマンドで同じパターンを再利用してコピーを実行できます。
ファイルの数(たとえば、数百万単位で実行)が本当に心配な場合は、次を使用できます。
find . -type f -depth 1 -name "*foo*" -exec cp {} /otherdir \; -print
これはシェル拡張を使用しないため、100万個の引数を使用してコマンドを実行しようとはしません。は-print
進行状況を示し、省略できます。コピーするファイルを簡単に一覧表示するには、次の手順に従います。
find . -type f -depth 1 -name "*foo*"
グロブを使用する:
shopt -s failglob
echo cp *foo* /path/to/separate
これにより、コピーコマンドが出力されます(またはで失敗しbash: no match: *foo*
ます)。
echo
出力を検証したら、ディレクトリエントリを実際にコピーするためにを削除します。