web-dev-qa-db-fra.com

Demandez à Find d'imprimer uniquement les noms de fichiers, pas les chemins d'accès complets

J'utilise la commande find dans un script ksh, et j'essaie de récupérer uniquement les noms de fichiers, plutôt que le chemin complet. Comme dans, je veux qu'il renvoie text.exe, pas //severname/dir1/dir2/text.exe.

Comment pourrais-je obtenir cela? Pour clarifier, je connais le répertoire dans lequel se trouvent les fichiers, je saisis simplement ceux créés avant une date de ceetain, donc le chemin d'accès n'a pas d'importance.

29
Steve

vous pouvez le faire avec:

find ..... |sed 's#.*/##'

mais est-ce vraiment logique? s'il y a deux fichiers avec le même nom mais situés dans des répertoires différents, comment les distinguer?

par exemple.

you are in /foo

/foo/a.txt
/foo/bar/a.txt

MODIFIER

modifiez la réponse pour obtenir une meilleure mise en forme du texte.

Comme vous l'avez décrit dans le commentaire, vous voulez donc

  1. trouver des fichiers,
  2. les copier dans un répertoire,
  3. les compresser dans une archive, dites a.gz
  4. supprimer les fichiers copiés uniquement si l'étape 2 a réussi

Cela pourrait être fait en un seul coup:

find ...|xargs tar -czf /path/to/your/target/a.gz 

cela va trouver des fichiers, faites un tar (a.gz) dans votre répertoire cible.

13
Kent

Si vous utilisez GNU find, alors

find path -printf "%f\n"

affichera simplement le nom du fichier et exclura le chemin.

69
glenn jackman
find ... -exec basename {} \; 

fera aussi l'affaire ... mais comme @Kent le demande, pourquoi voulez-vous cela?

17
evil otto

Voici une autre réponse.

find | awk -F/ '{print $NF}'    
4
Chaya Balram

GNU find le supporte nativement en utilisant -printf donc tout ce que vous devez faire est

find ... -printf '%f\n'
0
haridsv