1

У меня есть вложенная структура каталогов, которая выглядит следующим образом:

top_dir
└── nested_1
    └── nested_2
        ├── a_file.txt
        ├── b_file.txt
        ├── directory
        ├── other_directory
        ├── y_file.txt
        └── z_file.txt

Я хочу удалить внутри nested_2 файлы, которые не начинаются с AM, и оставить каталоги в покое. Поэтому я хочу удалить y_file.txt и z_file.txt .

Мне нужно запустить команду find + regex в top_dir .

Я пробовал несколько версий этого:

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex "nested_1\/nested_2\/.*^[a-m]" #-delete

Кажется, не имеет значения, какое регулярное выражение я использую - единственный, который дает какой-либо результат, это

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex ".*" #-delete

который просто дает мне список всех файлов в каталоге с ведущими вложенными каталогами (как и ожидалось).

Тестирование на regexr также не помогло.

Что мне здесь не хватает?

1 ответ1

0
  1. ^[a-m] должно быть [^a-m] .
  2. После первой буквы может быть оставшаяся часть имени файла, поэтому вам нужно .* После [^a-m] , а не до.
  3. Эти зазоры не нужны (хотя они и не повредят).

find nested_1/nested_2 -maxdepth 1 -mindepth 1 -type f -regex "nested_1/nested_2/[^a-m].*" #-delete

Заметки:

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