Comment puis-je trouver un fichier en même temps voir sa taille? ERREUR: J'ai essayé cette commande, mais je n'ai eu que la taille et les détails des autres fichiers.
find -name "*.conf" | ls -l
find
a une option -ls
. Donc, votre commande devrait ressembler à ceci:
find -name '*.conf' -ls
Une option consiste à spécifier votre propre format avec -printf
. Par exemple, ceci affichera la taille du fichier suivi d'un espace, puis le nom du fichier (avec le chemin relatif):
find -name "*.conf" -printf "%s %p\n"
Vous pouvez terminer votre chaîne de format avec \0
au lieu de \n
si vous souhaitez séparer les enregistrements de sortie de NUL, dans le cas où vous attendez des noms de fichiers amusants (par exemple, ceux incluant des nouvelles lignes).
Pour mémoire, la tentative indiquée dans votre question ne fonctionne pas car vous essayez de canaliser la sortie de find
vers l'entrée dans ls
. ls
ne lit aucune entrée de STDIN. Par conséquent, la sortie de find
est simplement ignorée, puis ls
répertorie le contenu du répertoire actuel, comme d'habitude.
D'autres réponses ont déjà souligné
find
uniquement, en utilisant _-printf
_ls
avec find
uniquement, en utilisant _-ls
_find
vers un autre programme avec xargs
Cependant, la première et la deuxième approche ne donnent pas la sortie exacte de _ls -l
_ (le drapeau _-ls
_ est égal à _ls -dils
_) et la troisième nécessite un appel supplémentaire xargs
. Avec l’aide du drapeau _-exec
_, il est possible d’appeler _ls -l
_ directement à partir de find
:
_find -name "*.conf" -exec ls -l {} +
_
Cela donne la liste complète des noms de fichiers sous forme d'arguments à _ls -l
_ et l'appelle autant de fois que nécessaire.
Si vous voulez juste faire correspondre tous les fichiers se terminant par _.conf
_ dans et sous le répertoire en cours (et ARG_MAX
n'est pas un problème!), vous n'avez pas besoin de find
du tout . Vous pouvez plutôt utiliser les correspondances globales de bash
avec les options de shell globstar
et dotglob
comme suit: il est tout aussi sage de ne pas interrompre les nouvelles lignes dans les noms de fichiers et de faire correspondre les fichiers "masqués" comme find
:
_$ shopt -s globstar dotglob
$ ls -l **/*.conf
_
ls
ne récupère pas sa liste de fichiers à partir d'une entrée standard, il s'attend à ce qu'ils soient des arguments. La commande xargs
est une fonctionnalité générale permettant de transformer une entrée en arguments:
find -name '*.conf' | xargs ls -l
Toutefois, cela divisera les entrées en blancs, vous pouvez donc avoir des problèmes si l'un des noms contient des espaces. find
et xargs
ont des options qui fonctionnent ensemble pour atténuer cela:
find -name '*.conf' -print0 | xargs -0 ls -l
L'option -0
sur xargs
lui dit d'utiliser un octet nul comme séparateur entre les paramètres de l'entrée et -print0
indique à find
d'imprimer les noms séparés par un octet nul. au lieu de nouvelle ligne.