Je veux utiliser find
pour rechercher des fichiers dans un ensemble de dossiers restreints par des caractères génériques, mais où il y a des espaces dans le nom du chemin.
Depuis la ligne de commande, c'est facile. Les exemples suivants fonctionnent tous.
find te*/my\ files/more -print
find te*/'my files'/more -print
find te*/my' 'files/more -print
Ceux-ci trouveront des fichiers dans, par exemple, terminal/my files/more
et tepid/my files/more
.
Cependant, j'ai besoin que cela fasse partie d'un script; ce dont j'ai besoin est quelque chose comme ceci:
SEARCH='te*/my\ files/more'
find ${SEARCH} -print
Malheureusement, quoi que je fasse, je ne semble pas être capable de mélanger les caractères génériques et les espaces dans une find
commande au sein d'un script. L'exemple ci-dessus renvoie les erreurs suivantes (notez le doublement inattendu de la barre oblique inverse):
find: ‘te*/my\\’: No such file or directory
find: ‘files/more’: No such file or directory
Essayer d'utiliser des guillemets échoue également.
SEARCH="te*/'my files'/more"
find ${SEARCH} -print
Cela renvoie les erreurs suivantes, après avoir ignoré la signification des guillemets:
find: ‘te*/'my’: No such file or directory
find: ‘files'/more’: No such file or directory
Voici un autre exemple.
SEARCH='te*/my files/more'
find ${SEARCH} -print
Comme prévu:
find: ‘te*/my’: No such file or directory
find: ‘files/more’: No such file or directory
Chaque variation que j'ai essayée renvoie une erreur.
J'ai une solution de contournement, qui est potentiellement dangereuse car elle renvoie trop de dossiers. Je convertis tous les espaces en point d'interrogation (caractère générique à un caractère) comme ceci:
SEARCH='te*/my files/more'
SEARCH=${SEARCH// /?} # Convert every space to a question mark.
find ${SEARCH} -print
C'est l'équivalent de:
find te*/my?files/more -print
Cela renvoie non seulement les dossiers corrects mais aussi terse/myxfiles/more
, ce qui n'est pas censé le faire.
Comment puis-je réaliser ce que j'essaie de faire? Google ne m'a pas aidé :(
find "${SEARCH}" -print
?
te*/'my files'/more
.
SEARCH: command not found
l'find -print
exécution de la commande .