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?
command-line
ls
filenames
arabian_albert
la source
la source
ls -d -1 $PWD/*
-1
option garantit que vous obtenez un nom de fichier par lignels
détecte si la sortie est vers un fichier ou un terminal.find
réponse de @Andy Dalton est une meilleure solution, car elle n'échouera pas, quel que soit le nombre de fichiers à répertorier.Vous pouvez utiliser find. En supposant que vous ne souhaitiez que des fichiers normaux, vous pouvez faire:
Vous pouvez ajuster le paramètre de type selon vos besoins si vous souhaitez d'autres types de fichiers.
la source
ls
. Celafind
récursive les sous-répertoires, pour les non récursifs, vous devez ajouter-maxdepth 1
avant l'-type
argument.Notez que dans:
C'est le shell qui calcule la liste des fichiers (non cachés) dans le répertoire et transmet la liste à
ls
.ls
imprime simplement cette liste ici, vous pouvez donc aussi bien faire:la source
printf
a l'avantage supplémentaire que vous n'obtiendrez pas une erreur de «ligne de commande trop longue» si vous avez des milliers de fichiers car elleprintf
n'est pas exécutée en tant que processus distinct.printf
n'est pas intégré commepdksh
et certains de ses dérivés ou la plupart des versions du shell Bourne. Un inconvénient par rapport àls -d
est que s'il n'y a pas de fichier non caché, il s'imprimera/path/to/*
alors quels
vous donnera une erreur sur ce fichier qui n'existe pas à la place.Pour voir uniquement les fichiers normaux -
la source
Vous pouvez simplement utiliser
realpath
oureadlink
:xargs
construire et exécuter des lignes de commande à partir de l'entrée standard.realpath
: retourne le chemin absolu canoniséreadlink
: lire la valeur d'un lien symboliquela source
dpkg -S /usr/bin/realpath
. Regardez ça .Une autre façon avec
tree
, non mentionné ici, il va récursive et trouver la différence ou ls vous n'avez pas des erreurs (comme:Permission denied
,Not a directory
) vous obtenez également le chemin absolu dans le cas où vous voulez nourrir les fichiersxargs
ou une autre commandeles options signifiant:
Pour installer
tree
:sudo apt install tree
sur Ubuntu / Debiansudo yum install tree
sur CentOS / Fedorasudo zypper install tree
sur OpenSUSEla source
sudo apt install tree
sur Ubuntusudo yum install tree
sur CentOSsudo zypper install tree
sur OpenSUSEbrew install tree
sur MacDans un ancien environnement Linux, j'avais une
resolve
commande qui normalisait les chemins, y compris la transformation d'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 les fonctions des bibliothèques standard Python ou Perl (et probablement aussi d'autres langages).
resolve.py
:resolve.pl
:Ensuite, vous résoudriez votre problème avec:
Avec cette commande, vous pouvez également faire des choses comme ceci:
la source