LINUX.ORG.RU

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

 ,


0

1
#!/bin/bash

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

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

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

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 ★★★★★ ()
Ответ на: комментарий от 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 ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.