Поиск шаблона в именах файлов с числом

Вы не сделали dd диск, в то время как это было смонтировано, сделал Вас? Если Вы делаете для использования этого механизма для дублирования диска, начальной загрузки в спасение ОС (например, от CD-привода или Карты памяти) так, чтобы Вы размонтировали свой FS прежде, чем скопировать его.

Или в повышении можно обмануть при помощи волшебства sysrq для перемонтирования всех дисков, только для чтения, но это имеет последствия.

3
14.12.2013, 01:13
4 ответа

С zsh:

tar zcf ~/file.tar.gz 20130<1-4><1-15>

Если необходимо использовать bash:

shopt -s extglob
tar zcf ~/file.tar.gz 20130[1-4]@(0?|1[0-5])
5
27.01.2020, 21:10

grep укусил.

grep -zE "^20130[1-4](0[1-9]|1[0-5])$"
2
27.01.2020, 21:10
  • 1
    grep будет работать также. Так как этот конкретный шаблон, оказывается, хочет месяцы 01-04, первый 0 может быть включен с годом. Так, grep '20130[1-4][01..15]' будет соответствовать указанному диапазону. –  bsd 13.12.2013, 13:44
  • 2
    @bdowning, нет, [01..15], то же как [015.] соответствия любой из тех 4 символов 0, 1, ., или 5. –  Stéphane Chazelas 13.12.2013, 13:47

Используйте находят для нахождения имен файлов:

find . -maxdepth 1 -name "20130[1-4]0?" -o -name "20130[1-4]1[0-5]" 

проверьте, является ли это корректным набором, и используйте вывод в качестве входа для cpio:

find . -maxdepth 1 -name "20130[1-4]0?" -o -name "20130[1-4]1[0-5]" | cpio --create --format=ustar -O file.tar

@richard указал, что это могло пересечь в подкаталогах (если подкаталог соответствует шаблону) (и та оболочка развернула шаблон, исправленный).

Подробно останавливание на командной строке рискует командной строкой, становящейся слишком длинным, который мог бы произойти, если бы у Вас был файл каждые несколько секунд в течение каждого дня (20130101-00005, 20130101-00007. Передача по каналу имени файла в cpio не имеет проблемы.

2
27.01.2020, 21:10
  • 1
    Обратите внимание, что это не находка, которая делает работу здесь, но оболочку. Предупреждение рекурсивно вызовет каталоги, использовать эхо вместо находки, чтобы не сделать это. –  ctrl-alt-delor 13.12.2013, 13:15
  • 2
    would'nt пространство после вопросительного знака дает ошибку? –  Aditya Cherla 13.12.2013, 13:16
  • 3
    @Aditya, почему? этому нужно пространство. –  ctrl-alt-delor 13.12.2013, 13:19
  • 4
    @richard Извините! моя ошибка просто посмотрела на пример его –  Aditya Cherla 13.12.2013, 13:22
  • 5
    Возможно, назовите их сначала в Вашем сценарии shopt -s nullglob; shopt -u failglob, остановить его сбой, когда файл не найден. –  ctrl-alt-delor 13.12.2013, 13:28

Вы можете tar czvf file.tar.gz $(ls | grep "201301\|201302\|201303\|201304" | grep -v "16\|17\|18\|19\|20\|21\|22\|23\|24\|25\|26\|27\|28\|29\|30\|31") из базового каталога.

0
27.01.2020, 21:10
  • 1
    Остерегайтесь, хотя это должно работать, это хрупко: например, если бы год был 2016, то это не работало бы. –  ctrl-alt-delor 13.12.2013, 13:17

Теги

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