2010-11-04 14 views

risposta

7

Questo dovrebbe fare:

for f in *; do echo >> $f; echo $f >> $f; done 
  • primo eco di una nuova linea, then echo il nome del file.

  • Il >> dice "aggiungi alla fine del file".

+0

che non aggiunge il ritorno a capo richiesto prima del nome del file. – MForster

+0

risposta aggiornata. – aioobe

+0

Cosa succede se il nome del file contiene \? 'printf '\ n% s \ n'" $ f "' – ephemient

0

Edit: La risposta di aioobe è stata aggiornata per mostrare la bandiera -e che non ho visto quando ho risposto prima questo. Così ora sto solo mostrando un esempio che include una directory e come eliminare il nome della directory:

#!/bin/bash 
for fn in dir/* 
do 
    shortname=${fn/#*\//} 
    echo -e "\n$shortname" >> $fn 
done 

Se si desidera che il nome della directory, prendere la linea shortname=${fn/#*\//} e sostituire $ shortname con $ fn nell'eco .

0

Lasciate xargs fare il looping:

# recursive, includes directory name 
find -type f -print0 | xargs -0 -I% bash -c 'echo -e "\n%" >> %' 

o

# non-recursive, doesn't include directory name 
find -maxdepth 1 -type f -exec basename {} \; | xargs -I% bash -c 'echo -e "\n%" >> %' 

o

# non-recursive, doesn't include directory name 
find -maxdepth 1 -type f -printf "%f\0" | xargs -0 -I% bash -c 'echo -e "\n%" >> %' 

o

# recursive, doesn't include directory name 
find -type f -print0 | xargs -0 -I% bash -c 'f=%; echo -e "\n${f##*/}" >> %' 
0

Un altro metodo utilizza ex (o vim):

ex -c 'args **/*' -c 'set hidden' -c 'argdo $put =bufname(".")' -c 'wqa' 
Problemi correlati