На машине Linux, к которой у меня есть доступ, apt edit-sources
откроет редактор с текущим ] sources.list
для редактирования. Когда редактор закрывается, перед заменой старого списка выполняются некоторые базовые проверки работоспособности отредактированного списка.
Это файл конфигурации, который apt
использует для выборки пакетов.
Вы можете просмотреть руководство для sources.list
перед его редактированием ( man sources.list
).
Файл обычно находится в / etc / apt /
.
Использовать отрицательное совпадение (требует shopt -s extglob
, но, возможно, уже установлено):
rm !(today).md
(вы можете сначала использовать ls
вместо rm
для проверки результата ).
Много силы в extglob
, вы также можете
rm !(yesterday|today).md
если вы хотите сэкономить два файла.
Возможно, вам будет проще использовать расширенную функцию подстановки в bash , чтобы исключить файл, который вам не нужен:
shopt -s extglob
echo rm -- !(today).md
Вышеупомянутый (после удаления echo
для тестирования )говорит, что соответствует чему-либо, кроме today
, за которым следует .md
.
По умолчанию ваш пример не соответствует файлам с точкой -; вы можете изменить это поведение с помощью shopt dotglob
, при желании
Ваш скрипт не работал так, как написано, потому что шаблон глобуса, который вы использовали (надлежащим образом )префикс имени файла ./
; следовательно, ваш внутренний тест должен был сравниться с ./today.md
.
Приведенные выше решения являются лучшими, но ваш код не работает из-за сравнения.
"./today.md" не равно "today.md".
Unix славится наличием множества способов выполнения одних и тех же простых задач. Некоторым нравится использовать sed
, но мне нравится grep
, поэтому, если бы я просто печатал в командной строке, я бы использовал:
rm -i `ls *.md | grep -v '^today.md$'`
ls *.md
перечисляет все файлы, имена которых заканчиваются на .md
. |
передает результаты ls
в следующую команду, но в качестве побочного эффекта приводит к тому, что ls
выводит список файлов на несколько строк, по 1 в строке. grep -v '^today.md$'
повторяет неточно совпадающие строкиtoday.md
rm -i
затем берет результаты (, потому что команды находятся внутри обратных кавычек ), которые спрашивают вас, хотите ли вы удалить их, 1 за 1. Я всегда делаю это, когда использую сгенерированный список файлов, на случай, если что-то выходит из строя генератор. Вы можете использовать rm
без -i
, чтобы удалить файлы без запроса, но это более рискованно, а также не дает вам список файлов, которые были удалены. find. -maxdepth 1 -name '*.md' ! -name today.md -type f -print
Должен найти все файлы(-type f
)в текущем каталоге(.
--или явно поместить туда имя каталога )только(-maxdepth 1
предотвращает следующие подкаталоги ), которые заканчиваются на .md
(-name '*.md'
), за исключением(!
)файл today.md
.
Не забудьте заключить '*.md'
в одинарные кавычки, чтобы ваша оболочка не пыталась расширить это до списка файлов.md в текущем каталоге перед выполнением find
.
Будет напечатан список файлов, которые необходимо удалить. Вместо этого измените -print
на -delete
, чтобы удалить их.