2010-11-04 10 views

ответ

7

Это должно сделать:

for f in *; do echo >> $f; echo $f >> $f; done 
  • Первый эхо новой строки, а затем повторить имя файла.

  • >> говорит: «Добавить в конец файла».

+0

Это не добавляет запрашиваемую строку перед именем файла. – MForster

+0

обновленный ответ. – aioobe

+0

Что делать, если имя файла содержит \? 'printf '\ n% s \ n'" $ f "' – ephemient

0

Редактировать: ответ aioobe был обновлен, чтобы показать флаг -e, который я не видел, когда я впервые ответил на это. Таким образом, сейчас я просто показываю пример, который включает в себя каталог и как устранить имя каталога:

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

Если вы хотите, чтобы имя каталога, вынуть shortname=${fn/#*\//} линии и заменить $ с $ короткого имени Fn в эхе ,

0

Пусть xargs сделать зацикливание:

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

или

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

или

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

или

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

Другой метод, использующий ex (или VIM):

ex -c 'args **/*' -c 'set hidden' -c 'argdo $put =bufname(".")' -c 'wqa' 
Смежные вопросы