J'ai besoin d'un fichier (de préférence un fichier .list) qui contient le chemin absolu de chaque fichier d'un répertoire.
Exemple dir1: file1.txt file2.txt file3.txt
listOfFiles.list
:
/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt
Comment puis-je accomplir cela sous linux/mac?
ls -d "$PWD"/* > listOfFiles.list
Vous pouvez utiliser find. En supposant que vous ne souhaitiez que des fichiers normaux, vous pouvez faire:
find /path/to/dir -type f > listOfFiles.list
Vous pouvez ajuster le paramètre de type selon vos besoins si vous souhaitez d'autres types de fichiers.
Notez que dans:
ls -d "$PWD"/* > listOfFiles.list
C'est le Shell qui calcule la liste des fichiers (non cachés) du répertoire et transmet la liste à ls
. ls
affiche simplement cette liste ici, vous pouvez donc aussi bien faire:
printf '%s\n' "$PWD"/*
Pour voir uniquement les fichiers normaux -
find "$PWD" -type f > output
Une autre façon avec tree
, non mentionnée ici, elle va récursivement et contrairement à find ou ls vous n'avez aucune erreur (comme: Permission denied
, Not a directory
) vous obtenez également le chemin absolu au cas où vous voudriez alimenter les fichiers vers xargs
ou une autre commande
tree -fai /pathYouWantToList >listOfFiles.list
les options signifiant:
-a All files are printed. By default tree does not print hidden files (those beginning with a dot
`.'). In no event does tree print the file system constructs `.' (current directory) and `..'
(previous directory).
-i Makes tree not print the indentation lines, useful when used in conjunction with the -f option.
-f Prints the full path prefix for each file.
Pour installer tree
:
Sudo apt install tree
sur Ubuntu/Debian
Sudo yum install tree
sur CentOS/Fedora
Sudo zypper install tree
sur OpenSUSE
Dans un ancien environnement Linux, j'avais une commande resolve
qui normaliserait les chemins, y compris en faisant un chemin relatif en chemin absolu. Je ne le trouve pas maintenant, alors peut-être qu'il a été écrit par quelqu'un dans cette organisation.
Vous pouvez créer votre propre script en utilisant des fonctions dans les bibliothèques standard Python ou Perl (et probablement aussi d'autres langages).
resolve.py
:
#!/bin/env python
import sys
import os.path
for path in sys.argv:
print os.path.abspath(path)
resolve.pl
:
#!/bin/env Perl
use warnings;
use Cwd qw ( abs_path );
foreach (@ARGV) {
print abs_path($_), "\n";
}
Ensuite, vous résoudriez votre problème avec:
resolve.py * > listOfFiles.list
Avec cette commande, vous pouvez également faire des choses comme ceci:
cd /root/dir1/dir2/dir3
resolve.py ../../dir4/foo.txt
# prints /root/dir1/dir4/foo.txt