2014-10-14 4 views
0

Я создаю сценарий оболочки для поиска файлов с определенным именем и показываю их полный путь и размер.Почему readlink не показывает полный путь?

Например:

/home/miglui/Desktop/SO/teste/1/teste.txt: 14 bytes 

код сегмента, который у меня возникают проблемы является следующим:

for i in `find $1 -name $4 -type f -printf "%s "` ; do 
    path=`readlink -f $4` 
    echo "$path: $i bytes" 
done 

Код возвращает:

/home/miglui/Desktop/SO/teste.txt: 14 bytes 
/home/miglui/Desktop/SO/teste.txt: 48 bytes 
/home/miglui/Desktop/SO/teste.txt: 29 bytes 

Но должен вернуться :

/home/miglui/Desktop/SO/teste/1/teste.txt: 14 bytes 
/home/miglui/Desktop/SO/teste/2/teste.txt: 48 bytes 
/home/miglui/Desktop/SO/teste/teste.txt: 29 bytes 

В чем может быть проблема?

ответ

0

Вы запрашиваете размер 3-х различных файлов, но только отчетности имя параметра вы передаете в

Попробуйте это:.

(cd -P -- "$1" && find "$(pwd -P)" -name "$4" -type f -printf "$p: %s bytes\n") 
  • работать в субоболочке поэтому кд делает не влияет на текущую оболочку.
1

Проблема заключается в том, что каждая итерация цикла аргумента печатает 4 ($4) сценария. Это не имеет ничего общего с результатами вашего find. Возможно, вы хотите что-то еще вот так:

while read size name; do 
    path=`readlink -f $name` 
    echo "$path: $size bytes" 
done < `find $1 -name $4 -type f -printf '%s %h/%f\n'` 
+0

Отредактировано код для размещения имен файлов, содержащих внутренние пробелы. –

Смежные вопросы