Как я могу предотвратить случайное выполнение команды rm -r *?

7

Иногда я использую команду для удаления некоторых файлов. Например, имя может начинаться с 'a', поэтому я удалю с помощью команды rm -r a* , но я не хочу случайно удалять какой-либо другой каталог. Как заблокировать каталог, чтобы предотвратить удаление rm -r ?     

задан john 14.11.2012 в 22:09
источник

4 ответа

5

Вы можете использовать команду rm для rm -i в своей оболочке, поэтому она будет запрашивать ваше подтверждение для каждого файла.

Однако некоторые считают это вредным. См. alias rm="rm -i" считается вредным? на Superuser.com

Другие мысли приведены в Как предотвратить случайный rm -rf / ? * на StackOverflow.com.

    
ответ дан gertvdijk 14.11.2012 в 23:00
2

Лучший совет - вырасти, чтобы бояться и уважать команды rm -r или rm -rf, которые, когда вы вводите их, вы останавливаетесь и продолжаете медленно и с осторожностью (внимательно прочитайте команду несколько раз). Команды полезны, а иногда их нужно использовать, но не рекомендуется обманывать систему, чтобы избавить вас от этой ошибки; это не очень хорошая идея, чтобы привыкнуть к таким обходным решениям - подумайте о создании хороших привычек, которые можно носить с машины на машину.

    
ответ дан Daniel 15.11.2012 в 03:22
1

Если вы пытаетесь выборочно удалять элементы, вы можете использовать find .

find . -name "a*" \! -type d -delete

Вы можете проверить, что вы удаляете, запустив:

find . -name "a*" \! -type d -print

Например, создайте несколько каталогов и файлов:

mkdir -p testDir/a/b 
cd testDir
touch apple.txt banana.txt ant.tx a/antelope.txt a/bus.txt a/b/apostrophe.txt a/b/bug.txt

Чтобы просмотреть файлы и каталоги:

find . -name "*" -print

возвращает:

.
./a
./a/antelope.txt
./a/b
./a/b/apostrophe.txt
./a/bus.txt
./ant.tx
./apple.txt
./banana.txt

Чтобы проверить, что удаляется:

find . -name "a*" \! -type d -print

возвращает:

./a/antelope.txt
./a/b/apostrophe.txt
./ant.tx
./apple.txt

Чтобы удалить файлы:

find . -name "a*" \! -type d -delete

Чтобы убедиться, что удалены только файлы *:

find . -name "*" -print

возвращает:

.
./a
./a/b
./a/bus.txt
./banana.txt
    
ответ дан mmorris 15.11.2012 в 00:27
1

В дополнение к другим ответам здесь, я рекомендую вам больше использовать вкладку и меньше глотать. Из вашего вопроса кажется, что вы пытаетесь удалить один файл, но не хотите вводить полное имя. В этом случае вместо * вы должны нажать Tab . Завершение вкладки намного безопаснее.

Если вы действительно собираетесь удалить несколько файлов, чье имя соответствует glob, лучший способ, как уже указывалось, - дважды подумать, прежде чем нажать Enter. Кроме того, вы можете получить много душевного спокойствия, если используете резервное решение, которое поддерживает все изменения по мере их создания, чтобы вы всегда могли восстановить любую ошибку без риска потери данных.

    
ответ дан Scott Severance 15.11.2012 в 03:47