6 votes

La commande linux find ne fonctionne pas correctement

J'utilise Linux (Ubuntu), j'essaie de trouver les fichiers, mais cela ne fonctionne pas correctement. J'ai créé quelques fichiers dans ma structure de répertoires, par exemple : World/India/Maharashtra/Pune/filename.xml

Lorsque j'utilise la commande find comme :

find /home/lokesh/Desktop/Testing_India2/Test/World/India/Maharashtra/ -name filename*.xml -mmin -3000

Il donne un résultat parfait.

Mais lorsque j'utilise la même commande au niveau "Monde" ou "Inde" :

find /home/lokesh/Desktop/Testing_India2/Test/World/ -name filename*.xml -mmin -3000

il ne donne aucun résultat.

J'ai beaucoup d'annuaires au niveau de l'"Inde" ainsi qu'au niveau du "Maharashtra" et peut-être quelques annuaires à l'intérieur des annuaires du "Maharashtra". Je dois trouver chaque fichier créé dans tous les répertoires. Et j'ai monté tous les dossiers à partir de différentes machines (je veux dire certains états à partir d'une machine différente et d'autres à partir d'une machine différente).

Si quelqu'un sait comment résoudre ce problème, merci de me répondre dès que possible.

17voto

ismail Points 19146

Doublez les guillemets de votre chaîne de recherche et -L pour qu'il suive les liens symboliques :

find -L /home/lokesh/Desktop/Testing_India2/Test/World/ -name "filename*.xml" -mmin -30000

3voto

TDarwin Points 31

C'est un problème que j'ai rencontré aujourd'hui en utilisant le caractère générique "*". Je n'ai pas réussi à faire en sorte qu'il traverse continuellement les sous-répertoires à moins que je n'échappe le * avec un .

Essayez ceci :

find -L /home/lokesh/Desktop/Testing_India2/Test/World/ -name filename\*.xml -mmin -30000

3voto

KlausCPH Points 1738

Oui, comme indiqué, vous devez doublement interroger votre -name ou utiliser une barre oblique inverse avant l'argument * . La raison pour laquelle il ne fonctionne pas à partir d'un répertoire, mais fonctionne bien dans d'autres répertoires, est que le fichier * est utilisé par votre interpréteur de commandes pour générer des noms de fichiers. Cela se produit bien sûr avant que le caractère find est exécutée. Par conséquent, si vous avez un fichier qui correspond à l'élément filename*.xml dans votre répertoire actuel, il sera remplacé par le modèle find est exécuté, ce qui n'est pas ce que vous souhaitez. D'autre part, s'il n'y a pas de correspondance de motifs dans le répertoire courant, la commande * est transmis tel quel à la commande find. En utilisant qouting, vous protégez la chaîne de caractères contre la génération de noms de fichiers par l'interpréteur de commandes.

Salutations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X