En utilisant le shell tcsh sur Free BSD, existe-t-il un moyen de répertorier récursivement tous les fichiers et répertoires, y compris le propriétaire, le groupe et le chemin d'accès relatif au fichier?
ls -alR se rapproche, mais il n'affiche pas le chemin relatif devant chaque fichier, il montre le chemin en haut d'un regroupement, c'est-à-dire.
owner% ls -alR
total 0
drwxr-xr-x 3 owner group 102 Feb 1 10:50 .
drwx------+ 27 owner group 918 Feb 1 10:49 ..
drwxr-xr-x 5 owner group 170 Feb 1 10:50 subfolder
./subfolder:
total 16
drwxr-xr-x 5 owner group 170 Feb 1 10:50 .
drwxr-xr-x 3 owner group 102 Feb 1 10:50 ..
-rw-r--r-- 1 owner group 0 Feb 1 10:50 file1
-rw-r--r-- 1 owner group 0 Feb 1 10:50 file2
Ce que je voudrais, c'est une sortie comme:
owner group ./relative/path/to/file
réponse acceptée à cette question montre le chemin relatif vers un fichier, mais ne montre pas le propriétaire et le groupe.
Que dis-tu de ça:
find . -exec ls -dl \{\} \; | awk '{print $3, $4, $9}'
Utilisez l'arborescence . Peu de distributions Linux l'installent par défaut (dans ces jours sombres des seules interfaces graphiques :-), mais il est toujours disponible dans les référentiels standard. Il devrait également être disponible pour * BSD, voir http://mama.indstate.edu/users/ice/tree/
Utilisation:
tree -p -u -g -f -i
ou
tree -p -u -g -f
ou consultez la page de manuel pour de nombreux autres arguments utiles.
Fonctionne sous Linux Debian:
find $PWD -type f
find
se rapproche:
find . -printf "%u %g %p\n"
Il existe également "% P", qui supprime le préfixe du nom de fichier, si vous souhaitez que les chemins d'accès soient relatifs au répertoire spécifié.
Notez que c'est GNU find, je ne sais pas si le BSD find prend également en charge -printf.
Vous avez déjà une réponse qui fonctionne, mais pour référence, vous devriez pouvoir le faire sur les BSD (je l'ai testée sur un mac):
find . -ls
Si vous souhaitez utiliser Perl, ne l'utilisez pas comme un wrapper autour des commandes Shell. Le faire en Perl natif est plus rapide, plus portable et plus résistant. De plus, il évite les expressions régulières ad hoc.
use File::Find;
use File::stat;
find (\&myList, ".");
sub myList {
my $st = lstat($_) or die "No $file: $!";
print getgrnam($st->gid), " ",
getpwuid($st->uid), " ",
$File::Find::name, "\n";
}