2016-01-28 2 views
0

Я пытаюсь удалить программу, удалив все файлы, установленные установщиком. Это сценарий, который я пробовал, но он возвращает ошибку «Too many arguments» в строке 6 (выделено **), когда я пытаюсь запустить ее.Mac Удаление нескольких файлов Bash

Это должно быть развернуто на несколько машин через Apple Remote Desktop.

Я хотел бы поместить его в пакет для запуска, но так как исполняемый скрипт также выполнит эту работу. Я собираюсь сделать это неправильно? Это не весь сценарий, но он следует тому же шаблону.

#!/bin/bash 

## This will uninstall ETC Nomad v2.3.3.9.0.10.mpkg 
## From Contents of ETCnomad Eos Mac 2.3.3.9.0.10.pkg 

**if [ -d /Applications/Eos Family Welcome Screen.app ]; then** 
/bin/rm -rf /Applications/Eos Family Welcome Screen.app 
fi 

if [ -f /tmp/Element_Hotkeys.pdf ]; then 
/bin/rm -rf /tmp/Element_Hotkeys.pdf 
fi 

if [ -f /tmp/Eos_Hotkeys.pdf ]; then 
/bin/rm -rf /tmp/Eos_Hotkeys.pdf 
fi 

if [ -f /tmp/FixtureReleaseNotes.pdf ]; then 
/bin/rm -rf /tmp/FixtureReleaseNotes.pdf 
fi 

if [ -f usr/local/etc/DCIDTable ]; then 
/bin/rm -rf usr/local/etc/DCIDTable 
fi 

exit 0 
+3

Попробуйте поместить ' '' по пути/имена файлов с пробелами; избегайте использования абсолютных путей и используйте только 'rm'. Кроме того, рассмотрели ли вы использование [AppCleaner] (https://freemacsoft.net/appcleaner/) для Mac? – Jens

+1

Вместо этого используйте [AppCleaner] (http://appcleaner.en.softonic.com/mac). – trojanfoe

+0

Должно было включить это в исходное сообщение, это должно использоваться в производственной среде для его удаления не только с одной машины, развернутой через ARD. AppCleaner не будет работать. –

ответ

3

Ответ

' Использование вокруг пути/имен файлов, которые содержат пробелы или иначе оболочка будет пытаться интерпретировать части, отличные от имени файла и запутаться, следовательно, сообщение об ошибке.

Больше комментариев

  • Как jubobs указывает, что нет никакого смысла в тестировании, существует ли файл перед его удалением. Кроме того, вы уже используете опцию -f, которая игнорирует несуществующие файлы, поэтому тест становится неактуальным.
  • Удалите абсолютные пути из своих команд, чтобы сохранить ваш сценарий переносимым. Переменная окружения оболочки PATH используется для поиска команд в нужных местах.
  • Не нужно удалять файлы с /tmp/, потому что ОС делает это за вас.
  • Будьте осторожны, когда вы возитесь с системными папками, такими как /usr/, потому что каждая система обновляет их, и часто бывает трудно сказать все зависимости.

Вы можете упростить сценарий:

#!/bin/bash 

## This will uninstall ETC Nomad v2.3.3.9.0.10.mpkg 
## From Contents of ETCnomad Eos Mac 2.3.3.9.0.10.pkg 

rm -rf '/Applications/Eos Family Welcome Screen.app' 
# rm -rf /tmp/Element_Hotkeys.pdf 
# rm -rf /tmp/Eos_Hotkeys.pdf 
# rm -rf /tmp/FixtureReleaseNotes.pdf 
rm -rf /usr/local/etc/DCIDTable 

exit 0 
+1

os не может удалять файлы из tmp в течение нескольких дней, недель, месяцев или лет, в зависимости от различных факторов. Если файлы большие, может иметь смысл явно удалить их, а не ждать следующей перезагрузки или в следующий раз, когда процесс будет запущен для очистки/tmp. –

+0

@BryanOakley: Согласен. – Jens

+0

Fortunatly только файлы, которые я нацеливаю, устанавливаются программой, я использую Pacifist, чтобы открыть пакет и нацелить определенные файлы, которые он устанавливает. Спасибо большое. –

Смежные вопросы