Wie entgiftet man Dateinamen in einem Bash-Skript, ohne dass Fehler ausgegeben werden?

Wie entgiftet man Dateinamen in einem Bash-Skript, ohne dass Fehler ausgegeben werden?

Betriebssystem: Kubuntu 22.04.4 LTS x86_64
Detox 1.4.5

Zur Anzeige oben:

neofetch --stdout |grep 'OS:'
detox -V

Hier ist ein schädlicher Dateiname, der mit s1 beginnt:

s1 Ä Ö Ü - ä ö ü Science & < > " 1 \ 2 ⁄ 3 | ? * (&&9&&&) ::::z.pdf

script1wurde kopiert und ins Terminal eingefügt. script1Die Ausgabe funktioniert mit dem oben genannten schädlichen Dateinamen "$FILE1":

filename_before_detox='s1 Ä Ö Ü - ä ö ü Science & < > " 1 \ 2 ⁄ 3 | ? * (&&9&&&) ::::z.pdf'
filename_after__detox= s1_A_A-Aoe-A_A_pp_A_Science_and_1_2_a_3-and_and_9_and_and_and-z.pdf

script1funktioniert und liefert als Ergebnis einen entgifteten Dateinamen. Keine Leerzeichen und keine Sonderzeichen: siehe unten den gewünschten konvertierten, umbenannten Dateinamen:

s1_A_A-Aoe-A_A_pp_A_Science_and_1_2_a_3-and_and_9_and_and_and-z.pdf

script1:

clear 
DIR1=$HOME/Downloads    # DIR1=/home/x/Downloads 
cd $DIR1
ls -alF s1*    # List all filenames starting with s1
FILE1='s1 Ä Ö Ü - ä ö ü Science & < > " 1 \ 2 ⁄ 3 | ? * (&&9&&&) ::::z.pdf'
  detox -s iso8859_1    "$FILE1" 
# detox -s iso8859_1 -v "$FILE1" # v=verbose 
ls -alF s1*    # List all filenames starting with s1

script2funktioniert nicht:

Fehler = Keine solche Datei oder kein solches Verzeichnis

script2erkennt automatisch eine neue Datei in DIR1 = ~/Downloadsund führt beim Testen script2von „On Access“ DIR1eventuell
Clamscan auf Viren aus. FILE1Wird manuell eingefügt, DIR1um einen Download zu simulieren.

Verschiedene Zitatergebnisse:

detox -s iso8859_1  "$FILE1"    # No such file or directory
detox -s iso8859_1 '"$FILE1"'   # No such file or directory
detox -s iso8859_1 ""$FILE1""   # posting errors then ok result 

script2

clear 
DIR1=$HOME/Downloads    # DIR1=/home/x/Downloads 
inotifywait -q -m -e close_write,moved_to --format '%w%f' "$DIR1" |while read FILE1
do 
ls -alF s1*             # List all filenames starting with s1
detox -s iso8859_1 ""$FILE1"" 
ls -alF s1*             # List all filenames starting with s1
done

script2hat Fehler, dann ok Ergebnisse:

s1_A_A-Aoe-A_A_pp_A_Science_and_1_2_a_3-and_and_9_and_and_and-z.pdf

Aber es gibt viele Fehler:

rw-rw-r-- 1 x x 1153263 Mar 13 11:36 's1 Ä Ö Ü - ä ö ü Science & < > " 1 \ 2 ⁄ 3 | ? * (&&9&&&) ::::z.pdf'
/home/x/Downloads/s1: No such file or directory
Ä: No such file or directory
Ö: No such file or directory
Ü: No such file or directory
-: No such file or directory
ä: No such file or directory
ö: No such file or directory
ü: No such file or directory
Science: No such file or directory
&: No such file or directory
<: No such file or directory
>: No such file or directory
": No such file or directory
2: No such file or directory
⁄: No such file or directory
3: No such file or directory
|: No such file or directory
(&&9&&&): No such file or directory
::::z.pdf: No such file or directory
-rw-rw-r-- 1 x x 1153263 Mar 13 11:36 s1_A_A-Aoe-A_A_pp_A_Science_and_1_2_a_3-and_and_9_and_and_and-z.pdf
-rw-rw-r-- 1 x x  1153263 Mar 13 11:36 s1_A_A-Aoe-A_A_pp_A_Science_and_1_2_a_3-and_and_9_and_and_and-z.pdf
-rw-rw-r-- 1 x x 1153263 Mar 13 11:36 s1_A_A-Aoe-A_A_pp_A_Science_and_1_2_a_3-and_and_9_and_and_and-z.pdf

Was detoxbedeutet?

  • detox= Dateinamen bereinigen
  • Das detoxDienstprogramm benennt Dateien um, um die
    Arbeit mit ihnen zu erleichtern.
  • Es entfernt Leerzeichen und andere derartige Ärgernisse.
  • Es übersetzt oder bereinigt auch in 8-Bit-ASCII codierte Latin-1-Zeichen (ISO 8859-1), in UTF-8 codierte Unicode-Zeichen und CGI-Escape-Zeichen.

inotifywait= mit inotify auf Änderungen an Dateien warten

  • inotifywaitwartet effizient auf Änderungen an Dateien mithilfe der Linux- inotify(7)Schnittstelle.
  • Es eignet sich zum Warten auf Änderungen an Dateien durch Shell-Skripte.
  • Es kann entweder beendet werden, sobald ein Ereignis eintritt, oder kontinuierlich ausgeführt werden und Ereignisse ausgeben, sobald sie auftreten.

Wie entgiftet man Dateinamen in einem Bash-Skript, ohne dass Fehler ausgegeben werden?

verwandte Informationen