Variable im Pfad zur Datei im Bash-Skript

Variable im Pfad zur Datei im Bash-Skript

Ich habe eine Datei, die etwa 20.000 Zeichenfolgen enthält. Jede Zeichenfolge in dieser Datei sollte ein Argument für einen Befehl im Bash-Skript sein.

Zuerst generiert mein Skript eine Datei mit diesen Zeichenfolgen.

find /home/alotoffolders -type f -name  "*.mp4" | grep some_greps > ~/tests/find_smth

Danach versuchen wir, eine Variable festzulegen, die Teil des Arguments sein wird.

filename=$(cut -d/ -f11 ~/tests/find_smth)

Dann versuche ich, die gesamte Datei Zeile für Zeile zu lesen und jeden String als Eingabeargument zu verwenden (scheint zu funktionieren), aber bei der Ausgabe gibt es ein Problem.

  for i in `cat ~/tests/find_smth`; do ./other_script -input $i -output /home/folder1/folder2/$filename; done

Das Skript kann den statischen Pfad vor $filename nicht sehen.

Wo ist das Problem?

Antwort1

  • Benutze niemals for i in $(cat ...) ...oder ähnliches. Es durchläuft eine Schleife über Wörter, nicht über Zeilen. Und selbst wenn es das täte, dürfen Dateinamen Zeilenumbrüche enthalten.
  • VerwendenShell-Parametererweiterungoder basenameden Befehl, anstatt cutden Dateinamen abzurufen.
  • Anstatt grepfür die Ergebnisse von zu verwenden find, können Sie zB finddie Option -regexoder verwenden -iregex.

Benutzen find -execmit sh -c:

find /home/alotoffolders -type f -iregex 'some_pattern.mp4' \
  -exec sh -c '
    /path/to/other_script -input "$1" -output "/home/folder1/folder2/${1##*/}"
  ' find-sh {} \;

verwandte Informationen