Как перебрать несколько каталогов с несколькими ifs в bash? - PullRequest
1 голос
/ 11 апреля 2020

к сожалению, я новичок в bash, и я хочу написать скрипт, который будет запускаться в главном каталоге, и проверять все подкаталоги по одному на наличие определенных файлов, и если эти файлы присутствуют, выполнить операцию на них. На данный момент я написал упрощенную версию, чтобы проверить, могу ли я выполнить первую часть (проверка файлов в каждом каталоге). Этот код выполняется без каких-либо ошибок, которые я могу сказать, но он ничего не говорит о том, что он успешно нашел файлы, которые, как я знаю, есть.

    #!/bin/bash
    runlist=(1 2 3 4 5 6 7 8 9)
    for f in *; do
        if [[ -d {$f} ]]; then
        #if f is a directory then cd into it
            cd "{$f}"
            for b in $runlist; do
                if [[ -e "{$b}.png" ]]; then
                    echo "Found {$b}"
                #if the file exists then say so
                fi
            done
            cd - 
        fi
    done

'' '

1 Ответ

0 голосов
/ 12 апреля 2020

Добро пожаловать в stackoverflow.

Следующее будет делать трюк (комбинация поиска, массива и, если потом еще):

# list of files we are looking for
runlist=(1 2 4 8 16 32 64 128)

#find each of above anywhere below current directory
# using -maxdepth 1 because, based on on your exam you want to look one level only
# if that's not what you want then take out -maxdepth 1 from the find command
for b in ${runlist[@]}; do
   echo
   PATH_TO_FOUND_FILE=`find . -name $b.png`
   if [ -z "$PATH_TO_FOUND_FILE" ]
   then
      echo "nothing found" >> /dev/null
   else
      # You wanted a postive confirmation, so
      echo found $b.png
      # Now do something with the found file. Let's say ls -l: change that to whatever
      ls -l $PATH_TO_FOUND_FILE
   fi
done

Вот пример запуска:


mamuns-mac:stack foo$ ls -lR
total 8
drwxr-xr-x  4 foo  1951595366  128 Apr 11 18:03 dir1
drwxr-xr-x  3 foo  1951595366   96 Apr 11 18:03 dir2
-rwxr--r--  1 foo  1951595366  652 Apr 11 18:15 find_file_and_do_something.sh

./dir1:
total 0
-rw-r--r--  1 foo  1951595366  0 Apr 11 17:58 1.png
-rw-r--r--  1 foo  1951595366  0 Apr 11 17:58 8.png

./dir2:
total 0
-rw-r--r--  1 foo  1951595366  0 Apr 11 18:03 64.png
mamuns-mac:stack foo$ ./find_file_and_do_something.sh 

found 1.png
-rw-r--r--  1 foo  1951595366  0 Apr 11 17:58 ./dir1/1.png



found 8.png
-rw-r--r--  1 foo  1951595366  0 Apr 11 17:58 ./dir1/8.png



found 64.png
-rw-r--r--  1 foo  1951595366  0 Apr 11 18:03 ./dir2/64.png

...