Я хотел бы написать сценарий оболочки, чтобы записать все файлы, заканчивающиеся на .tif в данном каталоге, и все его подкаталоги в файл csv.
Каталог содержит различные подкаталоги, и они также могут содержать папки .zip, поэтому скрипт должен иметь возможность извлекать имена из папок zip.
Сначала я подумал о разделении этих шагов (разархивирование и получение имен файлов), но я не уверен, действительно ли это необходимо.
Поскольку я действительно новичок в работе с Shell, любая помощь будет признательна.
Искать .tif
файлы в папке и ее подпапках, затем запишите вывод в a .csv
файл можно использовать следующую команду:
find /path/to/folder -iname '*.tif' -type f >tif_filenames.csv
Искать также внутри .zip
файлы и добавляют вывод к предыдущему tif_filenames.csv
файл можно использовать:
find /path/to/folder -iname '*.zip' -type f -exec unzip -l '{}' \; | process
где process
следующая функция удара:
function process() {
while read line; do
if [[ "$line" =~ ^Archive:\s*(.*) ]] ; then
ar="${BASH_REMATCH[1]}"
elif [[ "$line" =~ \s*([^ ]*\.tif)$ ]] ; then
echo "${ar}: ${BASH_REMATCH[1]}"
fi
done
}
Вы можете использовать приведенный ниже код:
#!/bin/bash
for f in $(find . -iname "*.tif" -type f)
do
echo "$(basename $f)"
done
for f in $(find . -iname "*.zip" -type f)
do
less $f | grep "tif" | awk '{print $NF}'
done
Сохраните файл, скажем, как find_tif.sh
в каталоге, где расположены все файлы tif
и подкаталоги. дать ему исполняемое разрешение.
chmod +x find_tif.sh
Использование
./find_tif.sh >> tif_name_file.csv