Répertorie les fichiers de manière récursive dans la CLI Linux avec le chemin relatif au répertoire en cours

StackOverflow https://stackoverflow.com/questions/245698

  •  05-07-2019
  •  | 
  •  

Question

Ceci est similaire à cette question , mais je veux inclure le chemin relatif au répertoire actuel dans unix. Si je fais ce qui suit:

ls -LR | grep .txt

Cela n'inclut pas les chemins complets. Par exemple, j'ai la structure de répertoire suivante:

test1/file.txt
test2/file1.txt
test2/file2.txt

Le code ci-dessus renverra:

file.txt
file1.txt
file2.txt

Comment puis-je le faire inclure les chemins relatifs au répertoire actuel à l'aide de commandes Unix standard?

Était-ce utile?

La solution

Utiliser find:

find . -name \*.txt -print

Sur les systèmes qui utilisent GNU Find, comme la plupart des distributions GNU / Linux, vous pouvez omettre l’empreinte -print.

Autres conseils

Utilisez arborescence , avec -f (chemin complet) et -i (aucune ligne d'indentation):

tree -if --noreport .
tree -if --noreport directory/

Vous pouvez ensuite utiliser grep pour filtrer ceux que vous souhaitez.

Si la commande est introuvable, vous pouvez l'installer:

Tapez la commande suivante pour installer la commande arborescente sur RHEL / CentOS et Fedora linux:

# yum install tree -y

Si vous utilisez Debian / Ubuntu, Mint Linux entrez la commande suivante dans votre terminal:

$ sudo apt-get install tree -y

Essayez trouver . Vous pouvez le rechercher exactement dans la page de manuel, mais c'est un peu comme ceci:

trouver [répertoire de départ] -name [que trouver]

donc pour votre exemple

trouver. -name " *. txt "

devrait vous donner ce que vous voulez.

Vous pouvez utiliser find à la place:

find . -name '*.txt'

Cela fait l'affaire:

ls -R1 $ PWD | en lisant l; fait le cas $ l dans * :) d = $ {l%:} ;; ") d = ;; *) echo "$ d / $ l" ;; esac; fait | grep -i ".txt"

Mais il le fait en " péchant " avec l'analyse de ls , ce qui est considéré comme une mauvaise forme par les communautés GNU et Ghostscript.

DIR=your_path
find $DIR | sed 's:""$DIR""::'

'sed' effacera 'your_path' de tous les résultats 'trouver'. Et vous recevez par rapport au chemin 'DIR'.

Pour obtenir les noms de fichier de chemin complet des fichiers souhaités à l'aide de la commande find, utilisez-le avec la commande pwd:

find $(pwd) -name \*.txt -print

Voici un script Perl:

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if (

Voici un script Perl:

ls -LR | perl format_ls-LR.pl

utilisation:

<*> =~ /^\s+/); if (

Voici un script Perl:

<*>

utilisation:

<*> =~ /(^\w+(\/\w*)*):/) { $tmppath = $1 if defined $1; next; } print "$tmppath/

Voici un script Perl:

<*>

utilisation:

<*>"; } } sub main() { my @lines = (); while (<>) { push (@lines,

Voici un script Perl:

<*>

utilisation:

<*>); } format_lines(\@lines); } main();

utilisation:

<*>

Vous pouvez créer une fonction shell, par exemple dans votre .zshrc ou .bashrc :

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

Le premier ne fonctionnerait évidemment que sur des fichiers uniques.

Recherchez le fichier appelé "nom de fichier". sur votre système de fichiers en commençant la recherche à partir du répertoire racine "/". Le " nom de fichier "

find / -name "filename" 

Si vous souhaitez conserver les détails fournis avec la taille de fichier, etc., comme ls, dans votre sortie, cela devrait fonctionner.

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file

Vous pouvez implémenter cette fonctionnalité comme ceci
Premièrement, l’utilisation de la commande ls a indiqué le répertoire ciblé. Plus tard, en utilisant la commande find filtrer le résultat. De votre cas, cela ressemble à - toujours le nom du fichier commence par un mot fichier ***. txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)

Dans le poisson shell, vous pouvez le faire pour répertorier tous les pdfs de manière récursive, y compris ceux du répertoire en cours. :

$ ls **pdf

Supprimez simplement 'pdf' si vous voulez des fichiers de n'importe quel type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top