Не могли бы вы помочь мне понять, как это сделать?

Допустим, под этим каталогом:

/home/user1/

Есть 100 папок, имена этих папок от 1, 2, 3 ... до 100. В каждой папке 26 файлов.

  • Имена файлов в папке 1: 1a, 1b ... to 1z.
  • Имена файлов в папке 2: 2a, 2b ... to 2z.
  • Имена файлов в папке 100: 100a, 100b ... 100z.

Как я могу скопировать все файлы, заканчивающиеся на z, в новую папку?

2 ответа2

1

Используйте подстановочные знаки.

cp /home/user1/*/*z newfolder/

Некоторые из подстановочных знаков включают * ? и [] .

* соответствует любому количеству символов, которое может быть любым символом

? соответствует одному символу, который может быть любым символом

[] соответствует одному символу, который находится в пределах диапазона символов, определенных

Пример:

[jin@crypt /tmp] % ls foo/*/* 
foo/bar/1a  foo/bar/1c  foo/baz/1a  foo/baz/1c  foo/baz/2d  foo/quux/1b foo/quux/1d
foo/bar/1b  foo/bar/1d  foo/baz/1b  foo/baz/1d  foo/quux/1a foo/quux/1c foo/quux/3d

[jin@crypt /tmp] % ls foo/*/*d
foo/bar/1d  foo/baz/1d  foo/baz/2d  foo/quux/1d foo/quux/3d

[jin@crypt /tmp] % ls foo/ba?/*d
foo/bar/1d  foo/baz/1d  foo/baz/2d

[jin@crypt /tmp] % ls foo/ba??/*d
zsh: no matches found: foo/ba??/*d

[jin@crypt /tmp] % ls foo/baz/*[a-c]
foo/baz/1a  foo/baz/1b  foo/baz/1c
1

Используйте команду find:

find . -type f -name \*z -exec cp {} newfolder/ \;

Это выглядит немного сложным, поэтому я разобью его.

Найти находит файлы, где вы говорите это и ниже. Точка сама по себе означает «текущий каталог». Следующий параметр -type f означает «найти вещи типа file». «-Name * z» означает «и вещи с именем, совпадающим с« * z ». Далее, '-exec cp {} newfolder/' означает выполнение команды cp для найденного элемента - команда заменяет соответствующее имя файла на {}. Наконец, '\;' завершает командную строку exec - пропустите это, и вы получите ошибку.

Если вы просто хотите увидеть, какие файлы совпадают, сделайте это:

find . -type f -name \*z -print

Это просто выведет соответствующие файлы на экран.

Это должно работать практически во всех терминалах Linux, UNIX или Mac.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .