Как исключить файлы / каталоги из поиска с помощью аргумента программы в bash?

Возможно, вы захотите использовать что-то подобное, чтобы ожидать. Ниже приведен простой пример открытия удаленного сеанса telnet, ожидания запроса, отправки некоторых данных, ожидания ответа, сна и выхода.

#!/usr/bin/expect
spawn telnet localhost 8555
expect "Escape character is '^]'."
send "Hello World\n"
expect "Connection closed by foreign host."
sleep 1
1
09.03.2017, 11:05
2 ответа

Да, вы можете просто добавить -not -name , если в вашем скрипте есть второй аргумент:

#!/bin/bash 

targetDir="$1"
exclude="$2"

findString=" '$targetDir'"

if [[ ! -z "$exclude" ]]; then
        findString="$findString -not -name '$exclude'"
fi
eval "find $findString"

Например:

$ ls
file1  file1.sh  file2  file2.sh  file3.sh  file4.sh  file5.sh
$ foo.sh .
.
./file1
./file2
./file1.sh
./file4.sh
./file3.sh
./file5.sh
./file2.sh
$ foo.sh . '*sh'
.
./file1
./file2

Если вы хотите иметь возможность определять несколько шаблонов для exclude:

#!/bin/bash 

targetDir="$1"
findString=" '$targetDir'"
shift
exclude="'$1'"
shift
for i in "$@"; do
        exclude="$exclude -a -not -name '$i'";
done
if [[ ! -z "$exclude" ]]; then
        findString="$findString -not -name $exclude"
fi
eval "find $findString"
1
27.01.2020, 23:25

Решение с использованием массивов bash :

#!/bin/bash

declare -a find_arguments=( -type f )

for arg; do

  find_arguments+=( ! -name "$arg" )

done

find . "${find_arguments[@]}"

Если вам действительно нужно регулярное выражение, измените -name на -regex , но в вашем примере вам, кажется, требуется подстановка . (Кстати, -regex не является POSIX, но поддерживается GNU find .)

Демонстрация

touch {a,b,c}{x,y,z}
./myscript.sh 'a*' '*z'

Вывод:

./bx
./by
./cx
./cy

Я пропустил синтаксический анализ командной строки для -excl и тому подобное, поскольку вы не объяснили, как обычно выглядят параметры командной строки вашего скрипта, если это действительно просто -excl , то вы можете просто проверить его ( [[" $ 1 "= -excl]] ), а затем сдвиг .

2
27.01.2020, 23:25

Теги

Похожие вопросы