2014-09-02 2 views
-1

Я написал bash, чтобы отобразить имя всех файлов данной директории, но когда я запускаю это, он разбивает имя файла с пробелами.Обработка пространства как символ новой строки в bash

if [ $# -eq 0 ] 
then 
echo "give a source directory in the command line argument in order to rename the jpg file" 
exit 1 
fi 

if [ ! -d "$1" ]; then 
exit 2 
fi 

if [ -d "$1" ] 
then 
for i in $(ls "$1") 
do 
echo "$i" 
done 
fi 

Я получаю следующую вещь, когда я бегу Баш скрипт

21151991jatinkhurana_image 
(co 
py).jpg 
24041991jatinkhurana_im 
age.jpg 
35041991jatinkhurana_image 
.jpg 

Дело в том, что я пытался до сих пор сбрасывает переменную IFS как IFS = $ (эхо -en «\ т \ п \ 0"), но не нашел никаких изменений ....

Если кто-нибудь знает, пожалуйста, помогите мне .....

+2

Я не отправляю это как ответ поскольку я уверен, что это дублирующий вопрос. Пробелы в имени ваших файлов рассматриваются как разделитель элементов в 'for i в $ (ls" $ 1 ")', просто кладут кавычки 'for i в '$ (ls" $ 1 ")" '. Примечание: бесполезное использование 'ls', use:' for i in "$ 1"/* ' – syme

ответ

4

не цикл по результату ls. Парсинг ls делает мир хуже (хорошо читается: Why you shouldn't parse the output of ls).

Вместо этого, вы можете сделать сделать использование *, который расширяется к существующему содержанию в данном каталоге:

for file in /your/dir/* 
do 
    echo "this is my file: $file" 
done 

Использование переменных:

for file in $dir/* 
do 
    echo "this is my file: $file" 
done 
Смежные вопросы