
Ich vermute, dass ich etwas Einfaches übersehe, da es sich anscheinend um eine sehr unkomplizierte Aufgabe handeln sollte, aber ich komme nicht weiter und kann in den Foren nichts finden.
Ich versuche, es find
aus einem Shell-Skript heraus auszuführen, aber es passiert einfach nichts.
Ich habe beispielsweise einen Ordner mit einigen Dateien und einige Unterverzeichnisse mit ebenfalls Dateien:
$ ls *
afile1.txt anotherfile.py findit.sh
subdir1:
morefiles1.txt morefiles2.txt morefiles3.txt somescript.py
subdir2:
evenmorefiles1.txt evenmorefiles2.py evenmorefiles2.sh
Ich möchte „find“ verwenden, um alle Dateinamen mit einem bestimmten Suchbegriff herauszuziehen (und schließlich an weiterzuleiten xargs
), aber ich kann einfach nicht verstehen, warum derselbe Befehl von der Kommandozeile aus funktioniert, aber nicht im Shell-Skript:
$ cat findit.sh
#!/bin/bash
echo $(which find)
echo "find . -name '"$1"' -print0"
find . -name '"$1"' -print0
echo "nothin??"
$ . findit.sh '*py'
/usr/bin/find
find . -name '*py' -print0
nothin??
$ find . -name '*py' -print0
./anotherfile.py./subdir2/evenmorefiles2.py./subdir1/somescript.py
Ich bin für jede Hilfe an dieser Front dankbar ...
Antwort1
Sie setzen die doppelten Anführungszeichen, -name '"$1"'
. Da Sie einfache Anführungszeichen verwenden, besteht die Zeichenfolge aus vier Buchstaben,Anführungszeichen Dollar Nummer eins Anführungszeichen.
Aber auch wenn Sie die doppelten und einfachen Anführungszeichen vertauschen, -name "'$1'"
enthält Ihre Zeichenfolge immer noch einfache Anführungszeichen. In diesem Fall $1
versuchen dog
Sie also, eine Übereinstimmung mit der fünfstelligen Zeichenfolge zu finden 'dog'
.
Wenn Sie nach passenden Dateien suchen *.py
, dann setzt Ihr Skript richtig $1
, aber Sie möchten diesen Ausdruck wie folgt verwenden
find . -name "$1" -print0