LINUX.ORG.RU

rm и инвертирование.


0

1

Здравствуйте.

А есть ли возможность инвертировать команду rm?

То есть написать что-то типо rm -r ./* ! file1 ! file2

То есть стереть весь каталог кроме нескольких файлов?

В ман смотрел в гугл тоже.

Спасибо.

★★

Последнее исправление: wlan (всего исправлений: 1)
Ответ на: комментарий от geekless

Нихрена себе магия, надо осилить уже ABS, спасибо, сейчас затестим.

wlan ★★
() автор топика
Ответ на: комментарий от geekless
root@44561-1:/home/user# ls -a
.  ..  ???-?????  .bash_logout  .bashrc  dm.tar  .profile  temp  test
root@44561-1:/home/user# ls -A |egrep -v '^(.bash_logout|.bashrc|dm.tar|.profile|temp)$' | xargs -I. rm  \".\"
rm: невозможно удалить «"\244\256\254-\254\245\347\342\353"»: Нет такого файла или каталога
rm: невозможно удалить «"test"»: Нет такого файла или каталога
root@44561-1:/home/user# ls -a
.  ..  ???-?????  .bash_logout  .bashrc  dm.tar  .profile  temp  test
root@44561-1:/home/user#

Добавление опции -r к rm выдаёт такой же результат.

wlan ★★
() автор топика
Ответ на: комментарий от wlan

Короче смысл то в чём, мне нужно снести вон то говно с неверной кодировкой.

rm -r «\244\256\254-\254\245\347\342\353» тоже не работает.

wlan ★★
() автор топика
Ответ на: комментарий от ados

Мне как-то не хочется на сервир загонять ненужные говна, хотелось бы с помощью шелла всё сделать.

//По глупости блин распаковал тар с винды. А там каталог на русском обозван. Надо завести себе привычку Использовать для этого отдельные каталоги, а не хомяка юзера.

Блин, мне правда проще снести юзера и создать его заново. Но это как-то не слишком тру.

wlan ★★
() автор топика
Ответ на: комментарий от ados

О блин, сработало, очевидно так, что аж стыдно. Блин, а я ведь пробовал как-то так и даже через файнд. >__<

Спасибо.

wlan ★★
() автор топика
Ответ на: комментарий от wlan

Мне как-то не хочется на сервир загонять ненужные говна

С mc поосторожнее в выражениях.

ados ★★★★★
()
Ответ на: комментарий от geekless

А, ну ок, буду иметь ввиду на будущее. Спасибо.

wlan ★★
() автор топика

На будующее: Самое простое:
mkdir /tmp/user ; mv file1 file2 /tmp/user ; rm -r ./* ; mv /tmp/user/* . ; rmdir /tmp/user

Tanger ★★★★★
()

Аргументы раскрывает и подставляет имена файлов shell. В bash такое точно нельзя, возможно, есть что-то встроенное в zsh

ky-san
()
Ответ на: комментарий от geekless

Ну не быдлокод ли?

Каждую неделю возникает такой тред. Запомните уже: самый простой способ рекурсивно обработать каталог — использовать find | while read f

sdio ★★★★★
()
Ответ на: комментарий от sdio

Ну расскажи, в чём заключаются двойные стандарты. Я тебя внимательно слушаю. Особо интересно, где ты в задаче ТС углядел необходимость «рекурсивно обработать каталог».

geekless ★★
()
Ответ на: комментарий от sdio

find не находил каталог с битой кодировкой.

Делал так: find . -name «*-*» -type -d

Вроде так, или кавычки забыл. >_<

wlan ★★
() автор топика
Ответ на: комментарий от Frakhtan-teh

Это я уже здесь лишний дефис поставил, в консоли я ошибок таких не делаю.

wlan ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.