Найти файлы, соответствующие нескольким критериям, и скопировать их в папку [закрыто]

Я новичок на этом форуме и надеюсь, что кто-нибудь сможет мне помочь.

Я пользователь MacOS.

У меня есть папка A с примерно 5000 файлами. Они названы, как описано ниже:

Бронирование № 0001 - РАЗМЕЩЕНА
Бронирование № 0001 - ПРЕДОПЛАТА
Бронирование № 0001 - ОПЛАЧЕНО
Бронирование № 0002 - РАЗМЕЩЕНА
Бронирование № 0002 - ОТМЕНЕНО
Бронирование № 0003 - РАЗМЕЩЕНО
Бронирование № 0003 - ПРЕДОПЛАТА
{{1} } Бронирование № 0003 - ОПЛАЧЕНО
Бронирование № 0004 - РАЗМЕЩЕННО
Бронирование № 0004 - ПРЕДОПЛАЧЕНО
Бронирование № 0004 - ОПЛАЧЕНО
{{ 1}} Бронирование № 0005 - РАЗМЕЩЕНА
Бронирование № 0005 - ПРЕДОПЛАТА
Бронирование № 0005 - ОПЛАЧЕНО
Бронирование № 0006 - РАЗМЕЩЕНО
Бронирование № 0006 - ОТМЕНА
...
Бронирование №NNNN - РАЗМЕЩЕНА

У меня есть список номеров бронирований (0002, 0007, 0012 , 0899, ..., NNNN), и мне нужны файлы, содержащие эти номера (независимо от того, являются ли они -PLACED, -PAID или -CANCELLED), которые должны быть скопированы в папку B .

Выполнение этого вручную потребует сотен часов, и ошибки очень возможны.

Я ищу решение сделать это с помощью команды терминала.

Я был бы очень признателен за пошаговое руководство, если для этого потребуется больше, чем одна команда терминала или любая другая помощь.

-1
задан 16 April 2019 в 01:26

1 ответ

Если в файле numbers числа по одному на строку, попробуйте:

while read -r num; do mv *"$num"* /path/to/folder2; done <numbers

Пример

Начнем с каталога с этими файлами:

$ ls
Booking #0001 - PAID       Booking #0002 - PLACED   Booking #0004 - PAID     Booking #0005 - PLACED     numbers
Booking #0001 - PLACED     Booking #0003 - PAID     Booking #0004 - PLACED   Booking #0005 - PREPAID
Booking #0001 - PREPAID    Booking #0003 - PLACED   Booking #0004 - PREPAID  Booking #0006 - CANCELLED
Booking #0002 - CANCELLED  Booking #0003 - PREPAID  Booking #0005 - PAID     Booking #0006 - PLACED

И папка 2 пуста:

$ ls ../folder2
$ 

Файл numbers выглядит следующим образом:

$ cat numbers
0002
0004

Теперь выполните нашу команду:

$ while read -r num; do mv *"$num"* ../folder2; done <numbers

Впоследствии наш текущий каталог содержит только эти файлы:

$ ls
Booking #0001 - PAID     Booking #0003 - PAID     Booking #0005 - PAID     Booking #0006 - CANCELLED
Booking #0001 - PLACED   Booking #0003 - PLACED   Booking #0005 - PLACED   Booking #0006 - PLACED
Booking #0001 - PREPAID  Booking #0003 - PREPAID  Booking #0005 - PREPAID  numbers

И в папке folder2 теперь есть эти файлы:

$ ls ../folder2
Booking #0002 - CANCELLED  Booking #0002 - PLACED  Booking #0004 - PAID  Booking #0004 - PLACED  Booking #0004 - PREPAID
0
ответ дан 16 April 2019 в 01:26

Другие вопросы по тегам:

Похожие вопросы: