Рейтинг:-2

удалить определенные файлы, кроме других

флаг in

Я нашел так много предложений о том, как удалить файлы с исключениями. Однако этот случай немного другой. Скажем, у меня есть 6 следующих файлов в моем Убунту 18.04:

text_1.json
text_2.json
видео_1.mp4
видео_2.mp4
видео_1_notouch.mp4
видео_2_notouch.mp4

Команда должна удалить только видео_1.mp4 и видео_2.mp4 файлы, оставляя другие файлы как есть.

Я пытался rm -v !(*.json|*_notouch.mp4) как было предложено здесь, но он удалил все 6 файлов.

Someone avatar
флаг my
Пожалуйста [отредактируйте] свой вопрос, чтобы включить 0. Ваша версия Ubuntu, 1. В чем ваша проблема 2. Теперь, что вы хотите после удаления этих файлов
Someone avatar
флаг my
Что значит удалил все?
guiverc avatar
флаг cn
[Подошел к концу *стандартный* срок поддержки Ubuntu 16.04 LTS](https://fridge.ubuntu.com/2021/03/13/extended-security-maintenance-for-ubuntu-16-04-xenial-xerus -begins-april-30-2021/), таким образом, теперь здесь не по теме, если только ваш вопрос не связан с тем, чтобы помочь вам перейти на поддерживаемую версию Ubuntu. Поддержка Ubuntu 16.04 ESM доступна, но не по теме здесь, см. https://askubuntu.com/help/on-topic См. также https://ubuntu.com/blog/ubuntu-16-04-lts-transitions- to-extended-security-maintenance-esm
bit_scientist avatar
флаг in
ой, это 18.04, а не 16.04, извините за опечатку
bac0n avatar
флаг cn
что говорит `shop extglob`?
bit_scientist avatar
флаг in
@bac0n Это было, когда я использовал команду, теперь она отключена
bac0n avatar
флаг cn
Я думаю, что shopt extglob устанавливается завершением bash, но вы также можете добавить его в `~/.bashrc`, хотя он не наследуется, поэтому вам придется переустанавливать его, когда вы собираетесь вызывать новую оболочку, например, `bash -c 'покупка extglob'` может быть записана как *bash -O extglob -c 'покупка extglob'*
user535733 avatar
флаг cn
`rm` является постоянным и необратимым. Если у вас есть риск из-за того, что файлы, которые нужно сохранить, и файлы, которые нужно удалить, смешиваются вместе, тогда реализуйте базовые элементы управления рисками: разделите шаги (используйте `найти`) или разделите файлы на временные папки. Или найдите время, чтобы просмотреть файл за файлом. Внимательно прочитайте свой вывод и проверьте свои выводы перед удалением. Это сэкономит вам много слез.
Рейтинг:7
флаг cn

Лучше и проще использовать найти команда:

найти . -type f -name "*.mp4" ! -name "*_notouch.mp4" -exec rm -v {} \;

Эта команда будет соответствовать любому имени файла, оканчивающемуся на .mp4, но не с _notouch.mp4 и выполнит команду, указанную после -exec.

Перед такими деструктивными операциями всегда целесообразно добавить или заменить г.м. команда с эхо и убедитесь, что вы получаете ожидаемые команды:

найти . -type f -name "*.mp4" ! -name "*_notouch.mp4" -exec echo rm -v {} \;

[Редактировать] Как упоминалось в комментариях; в вашем случае вы можете просто использовать -печатать -удалить на месте -exec эхо rm -v {} \; (что будет более эффективно, если у вас есть миллионы файлов). И чтобы получить список файлов, которые будут затронуты (перед запуском деструктивной команды), вы можете просто запустить:

найти . -type f -name "*.mp4" ! -name "*_notouch.mp4" (-Распечатать не является обязательным)

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

найти . -maxdepth 1 -type f -name "*.mp4" ! -name "*_notouch.mp4".

bac0n avatar
флаг cn
лучше использовать `+` вместо ```\;```
bac0n avatar
флаг cn
или `find -type f -name '...' ... -print -delete`
Liso avatar
флаг sd
+1 Классный трюк!
user535733 avatar
флаг cn
+1 за то, что нашли время объяснить БЕЗОПАСНЫЙ способ сделать это.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.