Я хотел бы запустить командную строку:
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.
И сделать заботу о файле permissions- , если есть что - то странное происходит, я предпочел бы команду прерывания. Я только хочу подавить ошибки «не существует».
Я посмотрел на некоторые другие вопросы с «ошибками rm» и обнаружил, что эти два вопроса (вроде) актуальны:
Удалить файлы и каталоги по их именам. Данный файл или каталог отсутствует
Но я не понимаю всего, что происходит в ответах на этот вопрос, и не знаю, что мне это нужно?
touch
Хак предложил в этом вопросе:
Rm не сообщает, когда файл отсутствует?
Кажется работоспособным, так как я не думаю, что я возражаю против снижения производительности (но какой тип повышения производительности вы бы взяли? - то есть: это разумно масштабируемая техника, или я просто изучаю очень вредные привычки?)
Я не уверен, как бы я сделал if-then
в командной строке.
Есть ли другие варианты простой очистки командной строки cut-n-paste?
Будет ли find -delete
работать лучше для моего случая? Если так, то почему?
ошибка в вопросе:
rm: 2*: No such file or directory
источник
rm
, поэтому вам нужно сказать, что это такое.zsh
качестве интерактивной оболочки? Вы получаетеNo matches found
ошибку?2*
в rm вместо того, чтобы развернуть ее в список файлов. Посмотрите на вопрос об ошибке: он говорит, что rm жалуется, а не sh / bas / zsh / ...Ответы:
Для вызова только
rm -P
для существующих обычных файлов, имена которых совпадают с шаблоном в каталоге (но не ниже):Например,
Чтобы соответствовать только не-каталогам, используйте
! -type d
вместо-type f
. Разница в том, что! -type d
это будет справедливо для более широкого диапазона типов файлов (символические ссылки, именованные каналы, сокеты и т. Д.)Так как вы хотите получить запрос на некоторые условия для найденных файлов, вы не должны использовать
-delete
вместо этого,-exec rm
так как это работает какrm -f
.Удалить,
-maxdepth 1
чтобыfind
рекурсивно искать в подкаталогах.источник
! -type d
может быть ближе кrm 2*
, я думаю?find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
-P
тоже хотели использовать .-type f
, но не знал, как заставитьrm
себя вести себя так - поэтому предложение @ Kusalanada было точным, а дифференциация / объяснение отлично подходит для обучения.rm 2*(.)
в zsh).