Je fais une liste de tous les fichiers de mon PC.

FILES=$(find . -type f -name "*" -printf "%s/%f\n" | sort -n) 

Le résultat doit être:

"size/file_name" 56872/file.txt 98566/test 1000254/foo 

Mon PC me donne une erreur

find: -printf: unknown primary or operator 

Des solutions?

Commentaires

  • Veuillez développer la question pour afficher les noms de fichiers dans votre répertoire.
  • Plus précisément, quel type de système fonctionne sur le PC et quelle version de find est utilisée?

Réponse

Loption -printf nest pas dans POSIX find . Il sagit dune fonctionnalité de GNU find , par exemple sous Linux.

Limplémentation particulière que vous utilisez nest pas affiché; ce pourrait être POSIX sans extensions. Par exemple, il ne se trouve pas dans FreeBSD , ou OSX .

Sans cela, vous pouvez utiliser une alternative, par exemple celle-ci (qui ne gérera pas les blancs intégrés, etc., mais fait peu dhypothèses sur vos outils):

find . -type f -exec ls -ld {} \; | awk "{ gsub("^.*/","",$9); printf "%s/%s\n", $5, $9; }" 

Avec plus dinformations sur les outils disponibles, il est (généralement) possible daméliorer la solution.

Commentaires

  • Sil vous plaît et comment puis-je faire liste avec la sortie " file_size / file_name " comme ci-dessus?
  • pourquoi analyser ls quand il serait préférable dutiliser find ... -print0 et de diriger vers xargs -0r stat ...? Les versions GNU et FreeBSD de stat ont des options (malheureusement différentes / incompatibles) pour formater la sortie, et peuvent afficher size/filename selon les besoins de lOP .
  • OP na fourni aucune information permettant de supposer une solution spécifique à la plate-forme.

Réponse

find et xargs avec GNU stat:

find . -type f -print0 | xargs -0r stat -c "%s/%n" 

Cette version de GNU nest pas vraiment nécessaire pour cette question particulière, car GNU find prend en charge printf de toute façon (mais cela peut être utile dans dautres contextes car il y a des choses que stat peut trouver sur un fichier que find ... -printf ne peut pas safficher).

FreeBSD & Mac OS X, cependant, est une autre histoire.

find et xargs avec FreeBSD ( Mac OS X) stat:

find . -type f -print0 | xargs -0r stat -f "%z/%N" 

Éventuellement diriger la sortie via sed -e "s:/./:/:" pour supprimer le ./ au début de chaque nom de fichier.

Exemple de sortie, de ma VM de test FreeBSD:

# find . -type f -print0 | xargs -0r stat -f "%z/%N" | sed -e "s:/./:/:" | head 149/.k5login 254/.profile 1169/.cshrc 297/.login 5589/.history 171/.ssh/known_hosts 1803/.ssh/authorized_keys 6699/.bash_history 368/.bashrc 4065/.viminfo 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *