альтернативные варианты для rm -f

Я хочу запустить командную строку:

cd ~/www/tmp/; rm -P 2*

Но я получаю сообщение об ошибке, если нет файлов, начинающихся с 2.

Вы бы подумали, что я бы хотел использовать -f, однако:

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

И я do забочусь о разрешениях на файлы - если что-то странно происходит, я бы предпочел, чтобы команда прерывалась. Я только хочу подавить ошибки «не существует».

Я рассмотрел некоторые другие вопросы с «rm errors» и нашел эти два, которые кажутся (вроде) релевантными:

Удалить файлы и каталоги по их именам. Нет такого файла или каталога

Но я не понимаю, что происходит в ответах на этот вопрос, и не знаю, что мне нужно?

В этом вопросе предлагается touch:

Имейте rm не сообщать, когда файл отсутствует ?

Кажется работоспособным, поскольку я не думаю, что я не против удара производительности (но какой тип производительности вы бы взяли?), то есть: это разумно масштабируемый метод, или я просто изучаю очень вредные привычки?)

Я не уверен, как сделать код if-then в командной строке.

Есть ли другие варианты простой очистки строк в командной строке?

Будет ли find -delete работать лучше для моего случая? Если да, то почему?


ошибка:

rm: 2*: No such file or directory
10 голосов | спросил user3082 26 J0000006Europe/Moscow 2018, 08:46:16

1 ответ


13

Для вызова rm -P для существующих обычных файлов, имена которых соответствуют шаблону в каталоге (но не ниже):

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

например.

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

Чтобы сопоставлять только не-каталоги, используйте ! -type d вместо -type f. Разница в том, что ! -type d будет верным для более широкого диапазона типов файлов (символические ссылки, именованные каналы, сокеты и т. Д.)

Поскольку вам нужно получить некоторые условия для найденных файлов, вы должны not использовать -delete вместо -exec rm, поскольку это работает как rm -f .

Удалить -maxdepth 1, чтобы find искать в подкаталогах рекурсивно.

ответил Kusalananda 26 J0000006Europe/Moscow 2018, 09:12:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132