Автор Гілка: find  (Прочитано 1982 раз)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
find
« : 2007-06-07 15:04:04 »
Як примусити find закоментовувати рядки лапками, щоб передати їх до іншої програми?

Наприклад:for i in `find -type f` ; do chmod -x $i ; done дасть купу помилок, якщо попадуться файли з пробілами. От як зробити щоб масив i  мав члени:

'./some dir/some file 1'
'./some dir/some file 2'
'./some dir/some file 3'
'./some dir/some file 4'
'./some dir/some file e.t.c.'

Тобто щоб і $i не розбивалась на пробілах (власне в цьому і проблема бо в файнді ще можна прінт задати так, щоб імена в лапки взяло, але пробілами все поб'є).
Просто іноді доводиться міняти режими доступу до файлів, щоб прибрати дозвіл на виконання і якщо натрапити на директорію - їй не буде корисною заборона виконуватись ;) - клятий фат замучив.
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: find
« Відповідей #1 : 2007-06-07 16:11:25 »
  • Є така штука, як X для chmod.
    The  letters ‘rwxXstugo’ select the new permissions for the affected users: read (r), write (w), execute (or access for directories) (x), execute only if the
           file is a directory or already has execute permission for some user (X), set user or group ID on execution (s), sticky (t), the permissions  granted  to  the
           user  who owns the file (u), the permissions granted to other users who are members of the file’s group (g), and the permissions granted to users that are in
           neither of the two preceding categories (o).
  •      eval "list=( $( find -P '.' \
                      -type f \
                      -printf '"%h/%f"\n' ) )"
    # Тепер ми маємо всі ці файли у масиві й можемо звертатися до них як "${list[0]}" "${list[1]}" ... "${list[${#list[@]}-1]}" = "${list[@]}"
  • Є опція монтування noexec.
« Змінено: 2007-06-08 13:38:29 від ISBear »

Praporshic

  • Гість
Re: find
« Відповідей #2 : 2007-06-07 16:46:44 »
Наприклад:for i in `find -type f` ; do chmod -x $i ; done
Конкретний приклад вирішується таким чином:
find -type f -exec chmod -x {} +

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: find
« Відповідей #3 : 2007-06-07 16:52:11 »
А як масив до циклу закинути?

_____________________________________

$ find -type f -exec chmod -x {} +
find: missing argument to `-exec'
« Змінено: 2007-06-07 16:56:08 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: find
« Відповідей #4 : 2007-06-07 17:00:48 »
А як масив до циклу закинути?
for i in "${list[@]}" ; do
       echo "${i}" # Лапки обов'язкові!
done
або
for (( i=${#list[@]}; i--; )) ; do
       echo "#${i}: ${list[${i}]}"
done
« Змінено: 2007-06-07 17:10:06 від ISBear »

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: find
« Відповідей #5 : 2007-06-07 17:20:18 »
$ find -type f -exec chmod -x {} +
find: missing argument to `-exec'

$ find --version # ?
$ man find # /-exec і подивіться, чи є там варіант команди з плюсиком.
           # коли ні - значить у вас дивна версія find, замініть + на \;
« Змінено: 2007-06-07 17:21:50 від ISBear »

Відсутній ofcnz

  • Новачок
  • *
  • дописів: 25
  • Карма: +0/-0
  • I Love YaBB 2!
Re: find
« Відповідей #6 : 2007-06-07 22:12:13 »
Як примусити find закоментовувати рядки лапками, щоб передати їх до іншої програми?

Наприклад:for i in `find -type f` ; do chmod -x $i ; done


find . -type f -exec chmod -x {} \;

Praporshic

  • Гість
Re: find
« Відповідей #7 : 2007-06-07 23:09:13 »
$ find -type f -exec chmod -x {} +
find: missing argument to `-exec'

Можливі варіації на тему плюса в кінці - зазвичай find`ом користуюсь під FreeBSD, і там багацько параметрів відрізняються від лінуксових версій.

Відсутній Михайло Даниленко

  • Адміністратор ЩОДО
  • Літератор
  • *****
  • дописів: 1262
  • Карма: +0/-0
  • [Debian Stretch]
Re: find
« Відповідей #8 : 2007-06-07 23:16:41 »
Можливі варіації на тему плюса в кінці - зазвичай find`ом користуюсь під FreeBSD, і там багацько параметрів відрізняються від лінуксових версій.
На мому LFS та у Дебі працює.
GNU find version 4.2.28
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
GNU find version 4.2.28
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION
« Змінено: 2007-06-08 13:34:46 від ISBear »

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: find
« Відповідей #9 : 2007-06-08 16:02:15 »
А як масив до циклу закинути?

<u>_________________________________</u>

$ find -type f -exec chmod -x {} +
find: missing argument to `-exec'

Має бути:
$ find -type f -exec chmod -x \{\} \;
[Fedora Linux]