Я хочу создать скрипт, который перебирает несколько каталогов из массива и, если файлы там, которых нет в черном списке, старше определенного периода времени, удаляют их. Проблема заключается в том, что любой тип сравнения строк (будь то 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
Как я могу сделать сравнение на самом деле?