Wie kann ich einen bestimmten Ordner verschieben, wenn im Bash-Skript eine Datei mit demselben Namen vorhanden ist?

Wie kann ich einen bestimmten Ordner verschieben, wenn im Bash-Skript eine Datei mit demselben Namen vorhanden ist?

Ich versuche, ein Shell-Skript zu schreiben, das eine bestimmte Datei findet und in einen Ordner verschiebt.

    #!/bin/sh
echo -n "/home/cosmoretro/movie/"
        read text2
while :
        do
        echo -n "Ara:"
        read text1
        b=$(find /home/cosmoretro 2>/dev/null -iname "$text1"*)
        IFS=$'\n'
    mv $b /home/cosmoretro/movie/"$text2"
done

Es werden aber auch Dateien verschoben, wenn die Datei dem durchsuchten Ordner entspricht.

Ich möchte nur den Ordner verschieben.

Antwort1

Ich habe schon beim Lesen dieses Skripts Schwierigkeiten. Darf ich vorschlagen, dass Sie es ein wenig umschreiben?

#!/bin/sh
echo -n "/home/cosmoretro/movie/"
read destinationFileName

while :
do
    echo -n "Ara:"
    read sourceFileName
    sourceFile=$(find /home/cosmoretro -type d -iname "$sourceFileName" -print -quit 2> /dev/null)
    if [[ -z $sourceFile ]]; then
        echo "No file named $sourceFileName found"
    else
        mv -- "$sourceFile" /home/cosmoretro/movie/"$destinationFileName"  
    fi
done

Was ich getan habe:

  • Verwenden Sie beschreibende Namen wie destinationFileNameanstelle vontext2
  • Richtig einrücken
  • Geben Sie an, finddass nur Verzeichnisse gefunden werden sollen -type d. Wenn Sie nur Dateien verschieben möchten, verwenden Sie -type fanstelle von -type d.
  • Verschieben Sie die Umleitung an das Ende eines Befehls, da sie nicht wichtig ist
  • Stoppen find, nachdem die erste Datei gefunden wurde ( -quit)
  • Entfernen Sie das Überflüssige *im findBefehl – ​​ich bin mir nicht sicher, was Sie damit bezwecken. Wenn Sie für Dateinamen Platzhalter verwenden wollten (z. B. foowürde die Suche nach foobar) zurückgeben, müssen Sie den Platzhalter einfügenhineindie Anführungszeichen, dh "$sourceFileName*".
  • Überprüfen Sie, ob überhaupt eine Datei gefunden wurde, indem -zSie testen, ob das Ergebnis leer ist.
  • Schützen Sie sich mvvor Dateinamen, die mit beginnen, -indem Sie die Option „Ende der Optionen“ verwenden.--
  • Setzen Sie Argumente richtig in Anführungszeichen, um zu verhindern, dass Leerzeichen den Befehl unterbrechen (keine Änderung nötig IFS)

verwandte Informationen