Я пишу make-файл, который очистит некоторые ненужные файлы в конце компиляции. Если цель уже была создана, она, конечно, пропустит эту цель, и бесполезный файл может не оказаться там. Так что, если я сделаю это:
rm lexer.ml interpparse.ml interpparse.mli
Я могу получить ошибки, потому что один из файлов не существует. Есть ли способ сказать, rm
чтобы игнорировать эти файлы?
Читая справочную страницу, я вижу следующую опцию:
-f Attempt to remove the files without prompting for confirma-
tion, 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. The -f option overrides any
previous -i options.
Это звучит почти как то, что я хочу, но я не совсем уверен в части разрешений. Есть ли способ сделать это?
rm
в песочнице? Похоже,-f
делает именно то, что вы хотите, независимо от того, что вы делаете.-f
опцией все равно попытается удалить его. Это не удастся. Это не скажет вам, что это не удалось. Полезно, если имя файла является переменной или глобом.rm --interactive=never
что действует какrm -f
за исключением того, что оно возвращает состояние выхода из ошибки. подробности смотрите здесь: unix.stackexchange.com/questions/72864/…Ответы:
-f
Вариант, безусловно , то , что вы хотите использовать.Подтверждение о разрешениях файла, на которые оно ссылается, таково:
Так
rm
что предупредит вас, если вы попытаетесь удалить файл, на который у вас нет разрешения на запись. Это разрешено, если у вас есть права на запись в каталог, но это немного странно, поэтомуrm
обычно предупреждает вас об этом.источник
-i
.set -e
во всех моих сценариях bash, так что сценарий завершается после того, как любая команда выдает ошибку. Я часто хочу, чтобы скрипт сообщал мнеrm
об ошибке, но все равно продолжаю. продолжается.Вот еще одно решение: https://stackoverflow.com/questions/11231937/bash-ignoring-error-for-a-particular-command
Просто добавьте оператор OR после вашей команды:
Таким образом, когда оператор № 1 не выполняется (выдает ошибку), запустите оператор № 2, который просто
true
.источник
rm -rf my/dir ||:
чтобы быть еще более кратким (:
сокращенноtrue
)Я опаздываю на вечеринку, но я использую это все время. В make-файле добавьте
-
в начало строки, чтобы игнорировать возвращаемое значение этой строки. Вот так:источник
Если вы не хотите использовать опцию -f, альтернативой является:
Это только предотвратит печать ошибок.
источник
Если вы найдете способ обуздать имена файлов,
rm
не будете жаловаться, если не сможете найти совпадение. Так что что-то вродеlexer.m* interpparse.*
и т. Д. Должно работать для вас (будьте осторожны, вы не слишком много удаляете, конечно). Кроме того,-f
это вполне разумный способ, если вы не надеетесь, что права доступа к файлам избавят вас от удаления файла, который вы не хотели - если вы не хотите его удалять, не помещайте его в списке.источник
sudo rm -rf
.lexer.m?
...? Что бы пойматьlexer.ml
иlexer.mz
, но неlexer.mll
илиlexer.mla
.Опция -f означает, что вам не будет предложено, если что-то не так, как ожидалось. Это не значит, что разрешения не учитываются.
Если у вас недостаточно прав для удаления файла, он не будет удален.
НО , если у вас достаточно привилегий для изменения привилегий, ваш файл будет удален. Это тот случай, когда вы являетесь владельцем файла с правами только для чтения для владельца (-r --------). Как владелец, вы можете
chmod u+w
, а затем удалить его:rm -f
удалит этот файл.источник
Может быть, может помочь строка, аналогичная с:
Я знаю, что это не очень умно, но это делает работу.
источник
Альтернатива:
Жаль, что Makefiles не может совместно использовать определения функций оболочки между строками.
источник
Вот что я использую в сценариях оболочки. Он скрывает сообщение об ошибке и код ошибки.
источник
rm doesnotexist 2&> /dev/null
Вы можете коснуться файлов, прежде чем вы их. что бы создать их, если они не существуют :-)
источник
написать
rm -rf ppp>/dev/null 2>&1
вам новое сообщение get get error Проблема возникает, если ошибка генерируется не для STDERR 2, а для STDOUT 1 ... Это происходит, когда команда генерирует не ошибку, а предупреждение. Вам необходимо установить фильтр и удалить это сообщение. Но этот случай обычный.источник
проверьте, существует ли файл первым, если он существует, а затем передайте его в rm. Тогда ошибки от rm будут значимыми. -f или игнорирование сообщения об ошибке обычно более всеобъемлющее, чем то, что хочет человек. -f может делать то, что ты не хочешь делать.
добавьте больше тестовых предложений, если есть еще файлы, которые вы хотите быть уверенными в существовании.
источник