Автор Гілка: Видалення файлів з винятком?  (Прочитано 4866 раз)

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Чи є простий спосіб видалити всі файли у поточній теці типу vasia.*, але не видаляти vasia.vip1 та vasia.sleep4 ?
rm, здається, такого не дозволяє зробити. Можна, звісно, тимчасово перейменувати ці файли, а потім повернути назад. Але може є гарніший спосіб на один рядок?

шось типу rm vasia.* -except vasia.vip1 vasia.sleep4 ?
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #1 : 2008-06-12 13:50:13 »
find -maxdepth 1 -type f -name 'vasia.*' \! -name 'vasia.vip1' \! -name 'vasia.sleep4' -delete
find -maxdepth 1 -type f -name 'vasia.*' \! -name 'vasia.vip1' \! -name 'vasia.sleep4' -print0 | xargs -0 rm -f

Відсутній raven

  • Новачок
  • *
  • дописів: 0
  • Карма: +0/-0
  • linux kettle
Re: Видалення файлів з винятком?
« Відповідей #2 : 2008-06-12 13:59:48 »
for a in `ls vasia.*`; do if [ -f $a ] && [ $a != "'vasia.vip1" ] && [ $a != "vasia.sleep4"  ]; then rm $a; fi ; done

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #3 : 2008-06-12 14:15:41 »
ls не зпрацює на пробільчатих файлах. такії назви файлів, звичайно, не кошерні, але іноді бувають.
тоді вже
$ oldifs="$IFS"
$ IFS=$'\n'
$ list=( $(ls -1) )
$ for file in "${list
  • }" ; do \

> rm -f "$file" ; \
> fi
$ IFS="$oldifs"

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Видалення файлів з винятком?
« Відповідей #4 : 2008-06-12 14:17:42 »
Цитата
ls не зпрацює на пробільчатих файлах. такії назви файлів, звичайно, не кошерні, але іноді бувають.
в моєму випадку їх точно не буде. Дякую Михайлу та Raven-у за відповіді!
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #5 : 2008-06-12 14:21:39 »
Упс,
$ list=( $(ls -1 | grep -E 'vasia\.(vip1|sleep4)' | cut -d : -f 2) )

Відсутній raven

  • Новачок
  • *
  • дописів: 0
  • Карма: +0/-0
  • linux kettle
Re: Видалення файлів з винятком?
« Відповідей #6 : 2008-06-12 14:23:13 »
ls не зпрацює на пробільчатих файлах. такії назви файлів, звичайно, не кошерні, але іноді бувають.
Та я знаю, find річ корисна. Врешті, щоб розрулити складніші ситуації є інструменти типу "в кожній бочці затичка". Перл там, чи пітон=)

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #7 : 2008-06-12 14:24:01 »
Упс.
останній варіант не працює на назвах із двокрапками...

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #8 : 2008-06-12 14:43:31 »
А! Згадав. Баш достатньо розумна штука, тому там просто прибрати ls та взяти в лапки:
for file in vasia.* ; do if [ -f "$a" ] && [ "$a" != "'vasia.vip1" ] && [ "$a" != "vasia.sleep4"  ]; then rm "$a"; fi ; done

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #9 : 2008-06-12 14:46:20 »
Упс. =)
for a in ....

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #10 : 2008-06-12 14:49:07 »
Упс. :D
"'vasia.vip1" =>  "vasia.vip1"

Відсутній raven

  • Новачок
  • *
  • дописів: 0
  • Карма: +0/-0
  • linux kettle
Re: Видалення файлів з винятком?
« Відповідей #11 : 2008-06-12 15:00:12 »
А! Згадав. Баш достатньо розумна штука, тому там просто прибрати ls та взяти в лапки:
for file in vasia.* ; do if [ -f "$a" ] && [ "$a" != "'vasia.vip1" ] && [ "$a" != "vasia.sleep4"  ]; then rm "$a"; fi ; done
І справді. А в лапки можна не брати.

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #12 : 2008-06-12 15:51:57 »
[isbear:~] touch a\ b.c
[isbear:~] ll a\ b.c
-rw-r--r-- 1 isbear isbear 0 чер 12 16:10 a b.c
[isbear:~] file="a b.c"
[isbear:~] ll "$file"
-rw-r--r-- 1 isbear isbear 0 чер 12 16:10 a b.c
[isbear:~] ll $file
ls: не вдається отримати доступ до a: No such file or directory
ls: не вдається отримати доступ до b.c: No such file or directory
[isbear:~]

Михайло Даниленко

  • Гість
Re: Видалення файлів з винятком?
« Відповідей #13 : 2008-06-12 16:04:42 »
але
[isbear:~] file="a b.c"
[isbear:~] ll $file
ls: не вдається отримати доступ до a: No such file or directory
ls: не вдається отримати доступ до b.c: No such file or directory
[isbear:~] ll "$file"
-rw-r--r-- 1 isbear isbear 0 чер 12 16:10 a b.c
[isbear:~] oldifs="$IFS"
[isbear:~] IFS=$'\n'
[isbear:~] ll $file
-rw-r--r-- 1 isbear isbear 0 чер 12 16:10 a b.c
[isbear:~] IFS="$oldifs"
[isbear:~]

Відсутній raven

  • Новачок
  • *
  • дописів: 0
  • Карма: +0/-0
  • linux kettle
Re: Видалення файлів з винятком?
« Відповідей #14 : 2008-06-12 16:12:57 »
[isbear:~][isbear:~] file="a b.c"
[isbear:~] ll "$file"
for сам маскує символи. Якщо просто загрібати вивід ls, то його треба або в лапки, або ручками кожен символ.