Skript zum Schreiben aller Dateinamen in einem Ordner und seinen Unterordnern in eine CSV-Datei

7

Ich möchte ein Shell-Skript schreiben, um alle Dateien, die mit .tif enden, in ein bestimmtes Verzeichnis und alle seine Unterverzeichnisse in eine CSV-Datei zu schreiben.

Das Verzeichnis enthält verschiedene Unterverzeichnisse und diese können auch ZIP-Ordner enthalten, sodass das Skript auch die Namen aus ZIP-Ordnern extrahieren kann.

Ich habe zuerst darüber nachgedacht, diese Schritte zu trennen (Entpacken und Abrufen der Dateinamen), bin mir aber nicht sicher, ob dies wirklich notwendig ist.

Da ich wirklich neu in der Arbeit mit der Shell bin, wäre jede Hilfe dankbar.

Joschi
quelle
1
Wie durchlaufe ich Unterordner? askubuntu.com/questions/406462/…
user.dz

Antworten:

6

Um nach .tifDateien in einem Ordner und seinen Unterordnern zu suchen und die Ausgabe in eine .csvDatei zu schreiben , können Sie den folgenden Befehl verwenden:

find /path/to/folder -iname '*.tif' -type f >tif_filenames.csv

Um auch in .zipDateien zu suchen und die Ausgabe an die vorherige Datei anzuhängentif_filenames.csv , können Sie Folgendes verwenden:

find /path/to/folder -iname '*.zip' -type f -exec unzip -l '{}' \; | process

Wo processist die folgende Bash-Funktion:

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
}

Quelle: https://unix.stackexchange.com/a/12048/37944

Radu Rădeanu
quelle
Ich denke es wird *.tifstatt sein *.sh. Ist es nicht?
Souravc
@souravc Ja, du hast recht. Ich habe diese Befehle für .shDateien getestet .
Radu Rădeanu
ich auch. Deshalb habe ich es bemerkt. Eine weitere Sache im ersten Fall besteht Ihre Ausgabe aus dem Pfad mit seinem Namen.
Souravc
@souravc Ja, das war meine Absicht. Das OP hat dies nicht klar angegeben und für mich ist es besser, den vollständigen Pfad für Dateien zu sehen.
Radu Rădeanu
1
danke für Ihre Hilfe. es hat bei mir funktioniert. Eine andere Möglichkeit, Namen in Zip-Dateien abzurufen, ist: unzip -l mypath / myfile.zip | awk '{print $ NF}' >> echo /home/myname/mylist.csv
Joschi
0

Sie können den unten angegebenen Code verwenden.

#!/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

Speichern Sie die Datei beispielsweise find_tif.shin dem Verzeichnis, in dem sich alle tifDateien und Unterverzeichnisse befinden. Gib ihm die ausführbare Erlaubnis.

chmod +x find_tif.sh

Verwendung

./find_tif.sh >> tif_name_file.csv
Souravc
quelle