Comment trouver des fichiers dans un répertoire donné, et d'ignorer les sous-répertoires à l'aide de bash
J'ai regardé d'autres questions similaires, mais ne pas en trouver un qui me permettrait de mieux comprendre le concept et de le rendre applicable à ma situation, fondée sur mon temps limité. Je suis tout simplement en exécutant la commande rechercher pour trouver certains fichiers, mais certains fichiers dans les sous-répertoires ont le même nom, je veux ignorer. Merci pour toute aide. Ci-dessous est la commande que j'utilise:
Les fichiers/motif je suis intéressé par:
/dev/abc-scanner, /dev/abc-espèces ....
La commande:
find /dev/ -name 'abc-*'
Ce qui est retournée:
/dev/abc-scanner
/dev/abc-cash
...
...
...
/dev/.udev/names/abc-scanner
/dev/.udev/names/abc-cash
Je veux ignorer les derniers fichiers: /dev/.udev/...
- ignorer les sous-répertoires spécifiques, ou de ne pas descendre dans les sous-répertoires? Pour ce dernier, l'utilisation de l'-maxdepth 1 option
- Poster une réponse.
- double possible de exclure le répertoire de trouver . la commande
Vous devez vous connecter pour publier un commentaire.
Si vous voulez juste pour limiter le trouver pour le premier niveau, vous pouvez le faire:
... ou si vous souhaitez particulièrement à exclure la
.udev
répertoire, vous pouvez le faire:xargs
au lieu de cela, donc quelque chose comme:find /dev -maxdepth 1 -name 'abc-*' | xargs ls -l
mais si il n'y a aucune chance qu'ils ont d'espaces dans les noms, vous devriez fairefind /dev -maxdepth 1 -name 'abc-*' -print0 | xargs -0 ls -l
ls -l /dev/abc-*
for x in /dev/abc-*; do readlink -f $x; done
ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev
... sauf au moins sur mon Linux/dev/*/*
ne pas inclure les fichiers dans/dev/.udev/*
de sorte que vous pouvez omettre lefgrep -v
.Est-il une raison particulière que vous avez besoin pour utiliser
find
? Vous pouvez simplement utiliserls
de trouver les fichiers qui correspondent à un modèle dans un répertoire.Si vous avez besoin d'utiliser
find
, vous pouvez utiliser le-maxdepth 1
commutateur de n'appliquer que dans le répertoire spécifié.-maxdepth 1
plutôt que-maxdepth 0
ls
. Vous pouvez trouver les mêmes fichiers avececho
ouwc
ou qu'avez-vous, car le shell développe le joker pour vous. Doncfor file in /dev/abc-*; do something with each "$file"; done
peut-être ce que l'OP est actuellement à la recherche d'.find
ne l'a pas par exemple.abc-*
vous obtiendrez le mauvais résultat dels -l
, mais peut-êtrels -ld
est acceptable comme solution de contournement.for f in `ls /dev/abc-*`; do echo $f; done
for f in ls; do echo $f; done
imprime juste " ls " (testé sur Solaris) (Nevermind, juste vu l'original de la réplique)ls
est superflu.for f in abc*; ...
est tout ce dont vous avez besoin.Cela peut faire ce que vous voulez: