- Удаление с исключением., Валенок, 16:53 , 09-Май-11 (1)
> Собсно, есть директория: > /home/1/ > в ней ряд файлов и других директорий. > home/1/2/ > home/1/3/ > В каждой из директорий, опять-же есть файлы и папки. > так-же, в директории /home/1/2/ есть папка 6 c файлами. > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в > ней. > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем. mc
- Удаление с исключением., sdog, 22:29 , 09-Май-11 (2)
- Удаление с исключением., fire002, 23:51 , 09-Май-11 (3)
- Удаление с исключением., pavlinux, 01:46 , 10-Май-11 (4)
- Удаление с исключением., ACCA, 02:04 , 10-Май-11 (5)
> cd /home; find . -type f -print | grep -v '1/2/6/' | > xargs rm -f ; find -type d -exec rmdir {} \; На мой взгляд, это было бы семантически правильнее: touch /tmp/ref ; chmod --reference=/home/1/2/6 /tmp/ref ; chmod -rwx /home/1/2/6 ; rm -rf /home/1 2> /dev/null ; chmod --reference=/tmp/ref /home/1/2/6 ; rm /tmp/ref Или ещё хлеще -
mv /home/1/2/6 /home ; rm -rf /home/1 ; mkdir -p /home/1/2 ; mv /home/6 /home/1/2/6
- Удаление с исключением., pavlinux, 02:27 , 10-Май-11 (6)
> Или ещё хлеще - > mv /home/1/2/6 /home ; rm -rf /home/1 ; mkdir -p /home/1/2 ; mv /home/6 /home/1/2/6 Только root может создавать каталоги в /home ... Ну раз пошла такая пьянка ... 1. chartt +i /home/1/2/6/*; rm -rf /home/1; chartt -i /home/1/2/6/*; 2. chown -R nobody /home/1/; chown -R root /home/1/2/6/; sudo -u nobody rm -rf ./
- Удаление с исключением., ACCA, 03:23 , 10-Май-11 (7)
>> Или ещё хлеще - >> mv /home/1/2/6 /home ; rm -rf /home/1 ; mkdir -p /home/1/2 ; mv /home/6 /home/1/2/6 > Только root может создавать каталоги в /home IMHO, вопрос был - что может наделать укуреный root? > 1. chartt +i /home/1/2/6/*; rm -rf /home/1; chartt -i /home/1/2/6/*; acca@acca96:~/tmp$ chartt chartt: command not found Прогнал. chattr хорошее решение, если гарантируется /home/1/2/6/*. > 2. chown -R nobody /home/1/; chown -R root /home/1/2/6/; sudo -u nobody > rm -rf ./ А как вернуть chown назад?
- Удаление с исключением., pavlinux, 04:02 , 10-Май-11 (8)
>> 1. chartt +i /home/1/2/6/*; rm -rf /home/1; chartt -i /home/1/2/6/*; > acca@acca96:~/tmp$ chartt > chartt: command not found ну бывает... > Прогнал. chattr хорошее решение, если гарантируется /home/1/2/6/*. >> 2. chown -R nobody /home/1/; chown -R root /home/1/2/6/; sudo -u nobody >> rm -rf ./ > А как вернуть chown назад? На бумажку записать :)
- Удаление с исключением., Вова, 06:49 , 10-Май-11 (9)
> Собсно, есть директория: > /home/1/ > в ней ряд файлов и других директорий. > home/1/2/ > home/1/3/ > В каждой из директорий, опять-же есть файлы и папки. > так-же, в директории /home/1/2/ есть папка 6 c файлами. > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в > ней. > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем. inum=`ls -i /home/1/2/6| sed 's/ .*//'` find /home/1 ! -inum $inum -delete
- Удаление с исключением., Andrey Mitrofanov, 12:03 , 10-Май-11 (10) +1
> так-же, в директории /home/1/2/ есть папка 6 c файлами. > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в > ней. > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем. $ cat ./x.sh #!/bin/bash mkdir tst || exit cd tst mkdir -p 1/{1,2,3}/{5,6,7} touch 1/{1,2,3}/{5,6,7}/file echo "BEFORE:" find 1/ -depth echo "TEST:" find 1/ -depth -path 1/2/6/* -prune -o -delete echo "AFTER:" find 1/ -depth $ ./x.sh BEFORE: 1/1/5/file 1/1/5 1/1/6/file 1/1/6 1/1/7/file 1/1/7 1/1 1/2/5/file 1/2/5 1/2/6/file 1/2/6 1/2/7/file 1/2/7 1/2 1/3/5/file 1/3/5 1/3/6/file 1/3/6 1/3/7/file 1/3/7 1/3 1/ TEST: find: cannot delete `1/2/6': Каталог не пуст find: cannot delete `1/2': Каталог не пуст find: cannot delete `1/': Каталог не пуст AFTER: 1/2/6/file 1/2/6 1/2 1/ $ _
- Удаление с исключением., Вова, 13:22 , 10-Май-11 (11)
>[оверквотинг удален] > TEST: > find: cannot delete `1/2/6': Каталог не пуст > find: cannot delete `1/2': Каталог не пуст > find: cannot delete `1/': Каталог не пуст > AFTER: > 1/2/6/file > 1/2/6 > 1/2 > 1/ > $ _ Это верный вариант, так и надо делать, через файнд, у утилиты довольно сильная логика условий. Я как-то пропустил в постановке задачи "и файлы в директории", тоже бы это написал, варианты выше - как ересь.
- Удаление с исключением., ACCA, 13:59 , 10-Май-11 (12)
> touch 1/{1,2,3}/{5,6,7}/file добавь touch 1/2/6_junk_file_{1..100} touch 1/2_junk_file_{1..100} Предположим, что их тоже нужно удалять.
- Удаление с исключением., Andrey Mitrofanov, 14:24 , 10-Май-11 (13)
> добавь Добавил. > touch 1/2/6_junk_file_{1..100} > touch 1/2_junk_file_{1..100} Без {...} - для теста достаточно одной таблэтки. > Предположим, что их тоже нужно удалять. Удалились. Без изменения основной строки. ... Для полноты :)) тест-кейса сделал - mkdir -p 1/{1,2,3}/{5,6,7} touch 1{,/{1,2,3}{,/{5,6,7}}}/file Получил "тот же" результат - TEST: find: cannot delete `1/2/6': Каталог не пуст find: cannot delete `1/2': Каталог не пуст find: cannot delete `1/': Каталог не пуст AFTER: 1/2/6/file 1/2/6 1/2 1/
- Удаление с исключением., XoRe, 14:56 , 10-Май-11 (14)
> Собсно, есть директория: > /home/1/ > в ней ряд файлов и других директорий. > home/1/2/ > home/1/3/ > В каждой из директорий, опять-же есть файлы и папки. > так-же, в директории /home/1/2/ есть папка 6 c файлами. > Суть задачи, удалить все файлы и директории, кроме /home/1/2/6/ и файлов в > ней. > Пробовал find с grep -v, но он таки удаляет /home/1/2/ со всем. rm -rf /home/[^1]* rm -rf /home/1/[^2]* rm -rf /home/1/2/[^6]* или find ! -path './1/2/6' -a ! -path './1/2/6/*' -exec rm -r {} \;
- Удаление с исключением., XoRe, 17:11 , 10-Май-11 (15)
> find ! -path './1/2/6' -a ! -path './1/2/6/*' -exec rm -r {} > \; Точнее так: find ! -path './1' -a ! -path './1/2' -a ! -path './1/2/6' -a ! -path './1/2/6/*' -exec rm -r {} \;
- Удаление с исключением., pavlinux, 01:23 , 11-Май-11 (16)
>> find ! -path './1/2/6' -a ! -path './1/2/6/*' -exec rm -r {} >> \; > Точнее так: > find ! -path './1' -a ! -path './1/2' -a ! -path './1/2/6' -a ! -path './1/2/6/*' -exec rm -r {} \; Не, у Митрофаныча короче :)
|