2013-09-18 2 views
0

Итак, я пытаюсь создать скрипт bash, который что-то делает для каждого файла в каталоге. Это мой сценарий. Проблема в том, что этот скрипт разбивается на каждое пространство, я бы предпочел, чтобы он разделился на новую строку. Таким образом, он выглядит так же, как ls print. (Я собираюсь поставить другой код внутри Дела, эхо просто тест)Bash select ignore space

#! /bin/bash 
for file in $(ls) 
do 
    echo $file 
done 

Так как же я решить эту проблему?

ответ

5

Лучше избегать работы с результатом ls (Why you shouldn't parse the output of ls).

Вместо этого, сделать что-то вроде:

for file in /your/dir/* 
do 
    echo "$file" 
done 
+0

ОК ТНХ, просто еще одна проблема. Ваш код напечатан - как â, как я исправить это? – Frozendragon

+0

Ммм, это очень странно. Вы имеете в виду, что есть файл под названием '-', который печатается как' â'? – fedorqui

+0

У меня есть файл, который содержит - как этот «файл 122-134», и когда я использую скрипт, я получаю «файл 122» 134 » – Frozendragon

0

Чтобы выбрать только файлы:

while read -r file; do 
    echo "$file" 
done < <(exec find -xtype f -maxdepth 1 -mindepth 1) 

Или просто фильтровать их

for file in *; do 
    [[ -f $file ]] || continue 
    echo "$file" 
done 
Смежные вопросы