Unerwartetes Ergebnis bei der Verwendung von Befehlszeilenargumenten zum Suchen nach Dateien mit dem Symbol

Unerwartetes Ergebnis bei der Verwendung von Befehlszeilenargumenten zum Suchen nach Dateien mit dem Symbol

Ich versuche, ein Skript zu schreiben, das zwei Befehlszeilenargumente akzeptiert, z. B. eines einen Verzeichnisnamen und das andere ein Symbol (jedes Symbol kann $, £, ^, * usw. sein). Es sollte dann prüfen, ob das Verzeichnis einen Dateinamen mit diesem Symbol hat, und wenn nicht, das Symbol dem Verzeichnis hinzufügen.

Wenn ich also nach einem Verzeichnis mit dem Namen testDirals erstes Argument suche und ein *als zweites Argument hätte, würde nach Dateien in diesem Verzeichnis gesucht, um festzustellen, ob dieses Symbol in einer Datei vorhanden ist. Wenn nicht, würde das Verzeichnis jetzt heißen testDir*.

Hier ist ein bisschen Code, den ich zu entwickeln versuche.

a1=$1  
  symbol=$(ls $a1 | grep $2)

   if [ "$symbol" != "" ]
     then
     echo "file has Symbol"

   else
     echo "The symbol was added to directory"
     mv $a1 $1$2
    fi

Es schien mit dem Symbol einwandfrei zu funktionieren, @daher glaube ich, dass es von den Sonderzeichen beeinflusst wurde. Gibt es eine Möglichkeit, Sonderzeichen zu maskieren, aber auch mit Nicht-Sonderzeichen zu arbeiten?

Antwort1

Erstens ist esnie eine gute Ideeum die Ausgabe zu analysieren, lswenn nach Dateinamen gesucht wird. Das wird bei allen seltsamen Zeichen, einschließlich eines einfachen Leerzeichens, abbrechen. Der beste Weg, dies zu umgehen, ist die Verwendung vonShell-Globingoder findstattdessen.

Ihr nächstes Problem ist, dass Sie die Variablen nicht in Anführungszeichen setzen, was bedeutet, dass Sonderzeichen erweitert werden, bevor der mvBefehl ausgeführt wird. Ein funktionierendes Beispiel für Ihr Skript wäre:

#!/usr/bin/env bash

if find "$1" -print0 | grep -z "$2" >/dev/null
then
    echo "file has Symbol" 
else
    echo  "The symbol was added to directory" 
    echo mv "$1" "$1$2" 
fi

WARNUNG: Ich habe keine Ahnung, warum Sie das tun möchten. Es würde beispielsweise versuchen, ein Verzeichnis in ein eigenes Unterverzeichnis zu verschieben, und das wird fehlschlagen. Ich vermute hier ein XY-Problem und würde vorschlagen, dass Sie Ihre Frage bearbeiten, um zu erklären, was Sie wirklich versuchen.

verwandte Informationen