Я хотел бы определить действие по расширению файла в моем массиве. Например, если массив соответствует * .zip, тогда выполните x. Сценарий не будет находиться в пути к архиву.
archive_path="$HOME/Downloads/"
compressed_files=("`find "$achieve_path" -iname "*.zip" -o -iname "*.rar" -o -iname "*.7z"`")
for files in "${compressed_files[@]}"; do
echo "$files" ;
done
Обновление 1: это еще один метод, который я попробовал. Возвращает без ошибок, но также без результатов.
shopt -s nocasematch
dir="$HOME/Downloads/all/"
for file in "$dir*.@(.zip|.rar|.7z)" ; do
case "$file" in
*.rar)
echo "$file this is a rar file"
;;
*.zip)
echo "$file this is a zip file"
#...
;;
*.7z)
echo "$file this is a 7z file"
#...
;;
esac
done
Решение:
Протестированные платформы: macOS Catalina
Примечания: Обновите bash до последней версии, последняя версия macOS не поставляется с последней версией bash по умолчанию.
#!/usr/bin/env bash
shopt -s nocasematch
dir="$HOME/Downloads/all/"
for file in "$dir"* ; do
case "$file" in
*.rar)
echo "$file this is a rar file"
;;
*.zip)
echo "$file this is a zip file"
#...
;;
*.7z)
echo "$file this is a 7z file"
#...
;;
esac
done