2010-02-12 20 views
0

Chers maîtres de la ligne de commande,Attribut de fichier BASH gymnastique: Comment obtenir facilement un fichier avec des chemins complets et des privilèges?

J'ai un arbre de répertoire pour lequel je veux générer un fichier qui contient deux entrées par ligne: chemin complet pour chaque fichier et les privilèges correspondants dudit fichier.

Par exemple, une ligne peut contenir:

/v1.6.0.24/lib/mylib.jar -r-xr-xr-x 

La meilleure façon de générer la colonne de gauche, il semble y avoir trouver. Cependant, parce que ls ne semble pas avoir la capacité de lire une liste de noms de fichiers ou de prendre stdin, il semble que je doive recourir à un script qui fait cela pour moi. ...Lourd.

J'étais sûr d'avoir vu des gens trouver d'une manière ou d'une autre pour exécuter une commande contre chaque fichier trouvé mais je dois être stupide ce matin car je n'arrive pas à le comprendre!

Quelqu'un? En ce qui concerne la lecture de ce fichier, il peut y avoir des espaces dans les noms de fichiers, donc ce serait bien s'il y avait un moyen d'obtenir certains outils de ligne de commande existants pour compter les champs de gauche à droite. Par exemple, nous avons coupé. Cependant, couper est à gauche en premier et ne prendra pas un nombre négatif pour signifier commencer la numérotation sur la droite (comme semble la syntaxe la plus évidente pour moi). ... Sans avoir à écrire un programme pour le faire, y a-t-il des moyens faciles?

Merci d'avance, et surtout merci d'expliquer tous les exemples que vous pourriez fournir!

Merci, RT

Répondre

3

GNU findutils 4.2.5+:

find -printf "$PWD"'/%p %M\n' 
0

Il peut également être fait avec ls et awk:

ls -l -d $PWD/* | awk '{print $9 " " $1}' > my_files.txt 
+0

c'est la pire façon d'analyser les noms de fichiers – ghostdog74

+0

@ ghostdog74 n'a pas dit qu'il était * efficace * ou * élégant *. Je voulais juste montrer que cela peut être fait avec de la vieille ls. Pas besoin de me rejeter. – mre

+0

Eh bien, ghostdog, je vous ai donné un vote sur celui-ci; J'aime connaître les alternatives! –

1
stat -c %A file 

imprimera autorisations de fichiers pour le fichier.

Quelque chose comme:

find . -exec echo -ne '{}\t\t' ';' -exec stat -c %A {} ';' 

vous donnera une version mal formatée de ce que votre après.

Il est rendu beaucoup plus difficile parce que vous voulez que tout soit aligné dans les tableaux. Vous pourriez vouloir regarder dans la commande 'column'. TBH Je voudrais juste détendre mes exigences de sortie un peu. Formatage de sortie dans SH est une douleur dans le cul.

0

bash 4

shopt -s globstar 
for file in /path/** 
do 
    stat -c "%n %A" "$file" 
done