LINUX.ORG.RU
ФорумAdmin

Помогите совладать с sh. Если подставить переменную даёт другие результаты нежели эти же значения в строке.

 , ,


1

2

приветствую, о всезнающий олл!

Потребовалось оградить find от определенных подкаталогов и нагуглил конструкцию "-not -path /path/*". Если перечислить все пути в команде - всё работает. Если список параметров занести в переменную и подставить её - результат не соответствует ожидаемому.

Скажем скрипт:
----------
#!/bin/sh

#Работает
find ./s -not -path "./s/d2/*" -not -path "./s/d4/*" -print >s-exclude.files
#./find-subdir.sh
#echo $exclude выдает:
# -not -path "./s/d2/*" -not -path "./s/d4/*"

#Хочу
exclude='
-not -path "./s/d2/*"
-not -path "./s/d4/*"
'
echo $exclude

find ./s $exclude -print >s-excl.files
----------
Вот как раз в результате: s-excl.files есть все файлы без исключений.

Что я делаю не так?
Как сделать чтобы список исключаемых можно было легко и читаемо изменять?

Банальная задача: получить список файлов измененных вчера т.е. find / -not -path «/proc/*» -not -path «/home/*» -not -path «/tmp/*» -mtime 1 -mtime -2 -exec ls -al {} \; но /home, /proc, /tmp, и.т.д из переменной.

★★

bash

declare -a exclude=(-not -path "./s/d2/*" -not -path "./s/d4/*")
find ./s "${exclude[@]}" -print >s-excl.files
AITap ★★★★★ ()

у меня так сделано:

find .  \(   -path "./yandex" -o -path "./.cache" -o -path "./backup" -o -path "./.thumbnails" \) -prune -o -user drb -newermt @1422223195 \( -type f -o -type d -empty -o -type l \) -print
emulek ()

Зажмурься

xcl=( \"/raz/dva/\" \"/tri/chetyre\" \"/i/tak/dalee\" )
find ./s ${xcl[@]/#/-not -path } -print > ./s-exclude-files.txt

Борьба с кавычками и разбиение на строки по вкусу.

thesis ★★★★★ ()

exclude='

sh по разному обрабатывает концы строк в разных кавычках. Попробуй двойные снаружи и одинарные внутри.

ziemin ★★ ()
Последнее исправление: ziemin (всего исправлений: 1)

Звезда есть, а лоркод не осилил

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