11

たとえば、ディレクトリにファイルを含めることができます

12_foo9.dat
34foo32.txt
24foobar.png
997_bar.txt

また、ファイル名に「foo」が含まれるファイルを別のディレクトリにコピーして、最初の3つのファイルが含まれるが、4番目のファイルは含まれないようにします。

私は周りを見回しましたが、これを行う方法を見つけていません。ディレクトリには非常に多くのファイルがありますが、コピーする必要があるのは1%程度です。

ありがとう

4

5 に答える 5

17
$ 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
于 2013-01-17T02:43:08.770 に答える
11

このステートメントを試してください:cp *foo* /newdir

于 2013-01-17T01:58:37.747 に答える
2
cp *foo* /path/to/separate_directory

最初に含まれるファイルを検証する場合は、次を使用します。

ls *foo*

これにより、一致するファイルが確認され、cpコマンドで同じパターンを再利用してコピーを実行できます。

于 2013-01-17T01:57:45.797 に答える
2

ファイルの数(たとえば、数百万単位で実行)が本当に心配な場合は、次を使用できます。

find . -type f -depth 1 -name "*foo*" -exec cp {} /otherdir \; -print

これはシェル拡張を使用しないため、100万個の引数を使用してコマンドを実行しようとはしません。は-print進行状況を示し、省略できます。コピーするファイルを簡単に一覧表示するには、次の手順に従います。

find . -type f -depth 1 -name "*foo*"
于 2013-01-17T02:31:27.397 に答える
0

グロブを使用する:

shopt -s failglob
echo cp *foo* /path/to/separate

これにより、コピーコマンドが出力されます(またはで失敗しbash: no match: *foo*ます)。

echo出力を検証したら、ディレクトリエントリを実際にコピーするためにを削除します。

于 2013-01-17T01:57:28.967 に答える