find funktioniert nicht, wenn es von einem Remote-Skript ausgeführt wird

find funktioniert nicht, wenn es von einem Remote-Skript ausgeführt wird

Ich habe folgende Zeile in einem Skript:

find ~ Templates -maxdepth 0 -type d -empty

das funktioniert wie erwartet einwandfrei. Wenn ich mein Skript jedoch auf die Samba-Freigabe kopiere und es von dort aus ausführe ( bash myscript.sh), findwird das Verzeichnis nicht gefunden:

find: ‘Templates’: No such file or directory 

$PATH-Variablen sind dieselben, tatsächlich konnte ich auch dafür keinen Grund finden.

Weiß jemand, warum sich find so verhält? Ist das ein Fehler oder verwende ich findden Befehl falsch, wie ich es soll?

mit Ubuntu 19.10 und Bash 5.0

Antwort1

Sie erhalten die Meldung find: ‘Templates’: No such file or directory, weil kein Unterverzeichnis Templates vorhanden ist

  • entweder - ab dem Zeitpunkt, an dem Sie das Skript ausführen
  • oder - in dem Verzeichnis, in das ein cdin Ihrem Skript nicht erwähnter

Ich frage mich, ob das alles ein Tippfehler ist und Sie meinten ~/Templates. In jedem Fall sollten Sie ~in einem Skript nicht verwenden, sondern stattdessen verwenden "$HOME", sodass der resultierende Pfad lautet "$HOME/Templates".

Antwort2

„Nein, da Templates das Verzeichnis ist, nach dem ich in einem ‚~‘ oder im Home-Verzeichnis des Benutzers suche.“

find ~ -maxdepth 0 -type d -empty -name Templates

Antwort3

Was lässt Sie glauben, dass Samba dieselben Umgebungsvariablen wie Linux hat?

Verwenden Sie den tatsächlichen/vollständigen Pfad zu dem Verzeichnis, in dem Sie suchen möchten, da es sich ~nicht um ein Verzeichnis handelt und es wahrscheinlich leer ist. Aus diesem Grund behandelt find Templatesden Pfad und nicht das Suchmuster ( find: ‘Templates’: No such file or directory).

Können Sie die Shell in Ihrem Samba-Verzeichnis starten und sehen, was sie ist $ pwd? Sie können auch die gesamte Umgebung mit überprüfen $ set;

Kapitel „Samba-Variablen verwenden“sagt, dass das Home-Verzeichnis %Hnicht ist ~.

kleines Experiment:

$ ls -l | grep -E '^d'  # to show there is 1 directory (tmp), which is not empty but doesnt have `Templates`
drwxr-xr-x 2  user  group  24576 Mar 16 16:16 tmp
$ find Templates -maxdepth 0 -type d -empty  # as if <path> (`~`) was empty
find: Templates: No such file or directory

$ find tmp Templates -maxdepth 0 -type d -empty  # as if `~` was `tmp`
find: Templates: No such file or directory

Entweder ~ist es leer (zuerst find ...mit „leerem“ Pfad) oder Sie haben es nicht Templatesim gesuchten Pfad (zweitens find).

$ touch Templates
$ find tmp Templates -maxdepth 0 -type d -empty  # as if `~` was `tmp`

$ rm Templates; mkdir Templates
$ find tmp Templates -maxdepth 0 -type d -empty  # as if `~` was `tmp`
Templates

Wenn

Templates ist das Verzeichnis, nach dem ich in einem '~' oder im Home-Verzeichnis des Benutzers suche

Dann

$ find ~ -maxdepth 1 -type d -empty -name Templates
~/Templates

Sollte das Problem lösen.

-maxdepth 0wendet die Tests und Aktionen nur auf die Kommandozeilenargumente an (gemäßMann finden; siehe auchdiese Antwort)

verwandte Informationen