Поиск подстроки в перечисленных файлах с пробелами из нескольких каталогов в bash - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу создать скрипт, который перебирает несколько каталогов из массива и, если файлы там, которых нет в черном списке, старше определенного периода времени, удаляют их. Проблема заключается в том, что любой тип сравнения строк (будь то grep -q или групповые символы) не работает при попытке вывести каталог с файлами, в которых есть пробелы (поэтому я изменяю значение $IFS на l oop через них ), что делает скрипт непригодным для использования. Конечно, в черных списках также могут быть пробелы.

Вот что я написал до сих пор:

#!/bin/bash

declare -a dirs=(~/path/to/dir1/* ~/path/to/dir2/*)
declare -a blacklist=("file number 1" "file number 2" "file number 3")


saveifs=$IFS
IFS=$'\n'

echo "Starting the autocleaner..."

for dirname in "${dirs[@]}"; do
        for filename in $(ls "$dirname"); do
                for excluded in ${blacklist[@]}; do
                        if [ -e $filename ]; then
                                if echo "$filename" | grep -q "$excluded"; then
                                # if [[ "$filename" == *"$excluded"* ]]; then
                                        :
                                else
                                        if test `find "$filename" -mtime +1`; then
                                                # rm -f $filename
                                                echo "File $filename removed."
                                        else
                                                echo "File $filename is up-to-date and doesn't need to be removed."
                                        fi
                                fi
                        else
                                :
                        fi
                done
        done
done

IFS=$saveifs

Как я могу сделать сравнение на самом деле?

1 Ответ

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

Вы пытались использовать одинарные квадратные скобки [ ... ] для линии сравнения? Чтение о разнице здесь между [ ... ] и [[ ... ]] может вам помочь.

...