LINUX.ORG.RU

Скрипт bash неверно выводит имена файлов

 ,


0

1
#!/bin/bash

f=`find -name \*.doc`
for file in $f
do
  printf "$file"
done

Bash реагирует на пробелы и выводит каждое слово с новой строки. Нужно с новой строки выводить каждый файл. Как сделать?

Если нужно работать с найденными файлами пишет файл не найден.



Последнее исправление: sersne (всего исправлений: 3)

man find

man xargs

А лучше - учи уроки.

anonymous
()

in $f

"$f"

Не знаю зачем printf тебе, через echo сделал:

$ f="$( find -name \*.doc )"; for file in "$f" ; do printf "$file"; done
$ f="$( find -name \*.doc )"; for file in "$f" ; do echo "$file"; done
NK ★★★★★
()

Это не скрипт неверно выводит, а ты неверно именуешь файлы, выкинь эти виндузячьи манеры и не использую пробелы в именах. Смотри man bash про IFS

IFS='\n'
farray=(`find -name '*'`)
unset IFS
for file in "${farray[@]}"
...
anonymous
()
Ответ на: комментарий от anonymous

выкинь эти виндузячьи манеры и не использую пробелы в именах

И перейти к именованию по схеме 8.3 ещё.

Radjah ★★★★★
()
Ответ на: комментарий от NK
f="$( find -name \*.doc )"; for file in "$f" ; do echo "$file"; abiword --to=txt --to-name=$file.txt $file; done

Ошибка в самом конце списка: 0.sh: 5: 0.sh: abiword: Argument list too long

sersne
() автор топика
Последнее исправление: sersne (всего исправлений: 1)
Ответ на: комментарий от anonymous

Как запустить два сразу

find -name '*.doc' -exec printf '%s\n' {} \;
find -name '*.doc' -exec abiword --to=txt --to-name={}.txt {} \;

abiword зависает намертво на неизвестном мне файле

sersne
() автор топика
Последнее исправление: sersne (всего исправлений: 1)

Используйте

find ... | while read f; do ...; done

MumiyTroll ★★★
()
Ответ на: комментарий от sersne
f="$( find -name \*.doc )"; for file in "$f" ; do echo "$file"; abiword --to=txt --to-name="$file.txt" "$file"; done
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.