Скрипт для записи всех имен файлов внутри папки и ее подпапок в CSV-файл

Я хотел бы написать сценарий оболочки, чтобы записать все файлы, заканчивающиеся на .tif в данном каталоге, и все его подкаталоги в файл csv.

Каталог содержит различные подкаталоги, и они также могут содержать папки .zip, поэтому скрипт должен иметь возможность извлекать имена из папок zip.

Сначала я подумал о разделении этих шагов (разархивирование и получение имен файлов), но я не уверен, действительно ли это необходимо.

Поскольку я действительно новичок в работе с Shell, любая помощь будет признательна.

7
задан 06.05.2020, 11:57

2 ответа

Вы можете использовать приведенный ниже код:

#!/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
0
ответ дан 06.05.2020, 11:58

Для поиска .tif файлов внутри папки и ее подпапок, а затем записать вывод в файл .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 - следующая функция bash:

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
}

Источник: https://unix.stackexchange.com/a/12048/37944

0
ответ дан 06.05.2020, 11:58
  • 1
    я также. Именно поэтому я заметил его. Еще одна вещь в первом случае Ваш вывод будет состоять путь со своим именем. – Jenks 06.05.2020, 11:59
  • 2
    спасибо за помощь. это работало на меня. другой способ получить имена в zip-файлах: разархивируйте-l mypath/myfile.zip | awk ' {печатают $NF} ' > > эхо/home/myname/mylist.csv – Jenks 06.05.2020, 11:59
  • 3
    @souravc Да, это было моим намерением. OP didn' t didn' t определенный ясный это и для меня лучше для наблюдения полного пути для файлов. – Jenks 06.05.2020, 11:59
  • 4
    @souravc Да, Вы имеете право. Я протестировал те команды на .sh файлы. – David Cullen 06.05.2020, 12:00
  • 5
    Я думаю, что это будет *.tif вместо *.sh. Isn' t это? – Jenks 06.05.2020, 12:00

Теги

Похожие вопросы