2016-04-11 4 views
-1

Есть что-то вроде rm -f, но auto n не авто y? Чтобы удалить то, что может быть удалено, rm не задано и не удалось удалить других. Как файлы с флагом только для чтения, файлы, открытые другой программой. Я пробовал yes n | rm somefile не работает.Как автоматически отменять удаление, а rm запрашивает подтверждение?

Это OS X 10.11. rm поддерживает файлы только для чтения.

Кажется, что на разных платформах поведение rm отличается по умолчанию.

Ответы Я пробовал на OS X 10.11 и Ubuntu 14.04 (не работает):

rm somefile 
rm --interactive=never somefile 
echo n| rm -i somefile 

Ubuntu журнал:

$ touch somefile 
$ chmod 444 somefile 
$ ls -l somefile 
-r--r--r-- 1 ubuntu ubuntu 0 Apr 12 06:04 somefile 
$ 
$ rm somefile 
rm: remove write-protected regular empty file ‘somefile’? n 
$ rm somefile 
rm: remove write-protected regular empty file ‘somefile’? n 
$ 
$ rm --interactive=never somefile 
$ rm --interactive=never somefile 
rm: cannot remove ‘somefile’: No such file or directory 
$ 
$ touch somefile             
$ chmod 444 somefile             
$ ls -l somefile            
-r--r--r-- 1 ubuntu ubuntu 0 Apr 12 06:06 somefile 
$ echo n| rm -i somefile 
rm: remove write-protected regular empty file ‘somefile’? $ ls -l somefile 
-r--r--r-- 1 ubuntu ubuntu 0 Apr 12 06:06 somefile 

@ раствора SaintHax в

for file in [email protected]; do 
    [ -w $file ] && rm $file 
done 

работы с читать только файлы на упомянутых выше платформах.

+1

Что это должен делать? Ничего? – pfnuesel

+0

@pfnuesel Нет, это не ничего. rm ничего не спрашивает и просто удаляет файл в большинстве случаев. Пусть он удаляется в большинстве случаев, но не отвечает, пока он спрашивает. Файл с флагом только для чтения, файл, открытый другой программой. – Al3n

ответ

1

Это прекрасно работает для меня на моих двух вариантах Linux.

echo n| rm -i *.csv 

Однако, -i всегда является интерактивным, поэтому он в основном отрицает команду. Если вы хотите пропустить что-либо с помощью команды readonly, я бы предложил создать функцию.

del() { 
    for file in [email protected]; do 
     [ -w $file ] && rm $file 
    done 
} 

Обратите внимание, что это работает только в том случае, если файлы не доступны для записи.

+0

Не работает с 444 файлами на OS X 10.11. Вызов 'remove somefile?' – Al3n

+0

'echo n | rm -i somefile' не работает, как ожидалось, на ubuntu 14.04. Попросил подтвердить. – Al3n

+0

@ Al3n У меня нет доступа к OS X, но я отредактировал ответ.Я считаю, что это делает то, что вы хотите. – SaintHax

1

Вы можете использовать --interactive или -i в качестве опции в команде rm, как указано на страницах руководства:

-i строке перед каждым удаление

--interactive [= КОГДА] запрашивать в соответствии с КОГДА: никогда, один раз (-I) или всегда (-i); без КОГДА всегда запрашивается

+0

Спасибо, нет никаких инструкций по OS X rm man. Я попробовал 'rm --interactive = never somefile' и получил' a.txt rm: незаконный вариант - -'. Пользователь версии для Mac rm'-i Запросить подтверждение перед попыткой удалить каждый файл, , независимо от разрешений файла, или стандартное устройство ввода является терминалом. Опция -i переопределяет любые предыдущие опции -f. Я попробую это на ubuntu. – Al3n

+0

'rm --interactive = never somefile' не работает на ubuntu 14.04. Удалил бы файл mod 444. – Al3n

0

Вы могли бы использовать:

rm --interactive=never somefile 
+1

Это то же самое, что 'rm somefile'. – pfnuesel

+0

Если вы не сделали псевдоним (как я) 'alias rm = 'rm -i'' – Till