Тот же механизм, что иlaenkeio , ответ , но более минималистичный. нет -переменная POSIX функция оболочки:
rmexcept(){ find "$1" $(shift; printf " -not -name %s" ${@}) -exec rm '{}' \; ;}
Команда оболочки printf
выполняет основную работу вместо for
или while
петля.
Используя оболочку bash
, shift
можно заменить параметром расширение:
rmexcept(){ find "$1" $(printf " -not -name %s" ${@:2}) -exec rm '{}' \; ;}
Обратите внимание, что ни одна из функций не завершит задание, если результирующие команды find
или rm
длиннее числа, возвращаемого getconf ARG_MAX
. См.:Командная строка Bash и ограничение ввода .
Вы можете использовать символы перенаправления вывода оболочки:>
и >>
.
>
создает новый файл или перезаписывает существующий файл. >>
создает новый файл или добавляет к существующему файлу. напр.:
ls >> lsoutput
создает файл с именем lsoutput
в вашем текущем рабочем каталоге с выводом команды ls
. Если lsoutput
уже существует, выходные данные команды ls
будут добавлены в конец файла lsoutput
.
Надеюсь, это поможет.