Существует множество ситуаций, когда использование a *практически неизбежно, например, rm -rf *в папке, содержащей тысячи вложенных папок и файлов.
Но что, если вы хотите исключить из команды только один или два файла или папки rm? Я гуглил свой путь и нашел только довольно сложные решения, find . -depth -not \( -name 'one' -o -name 'two' \
-o -name 'three' \) -exec rm {} \;как указано здесь .
Есть ли возможность сделать это проще - без этого обхода find? Например, rm -rf --exclude='one' --exclude='two' --exclude='three' *как в Rsync или просто rm -rf -e 'one','two','three' *?
Может быть , даже вообще возможность исключить вещи из *(так что другие команды типа cp, mv... не должны реализовывать свои собственные)? Что-то вроде *{'one','two','three'}или так?
mv -t /tmp one two three && rm -rf * && mv -t . /tmp/one /tmp/two /tmp/three, но я бы предпочел решение, дающее возможность явно исключать что-либо из *. Безусловно, будут ситуации, когда перемещение или копирование файлов в другое место назначения будет невозможным.
findэту--deleteопцию (не нужно выполнятьrmдля каждого файла. Это ненужные накладные расходы).