Ошибка пробелов при копировании файлов

Мне нужно скопировать все файлы и папки «главной» папки во все подключенные USB-ключи.

Итак, я написал этот код:

for usb_key in `ls /media/`;
    do
        for file in `ls -a /home/daniele/USB/MASTER`;
            do
                cp /home/daniele/USB/MASTER/"$file" /media/$usb_key/"$file"
            done;
    done;

for usb_key in `ls /media`;
    do
        umount /media/$usb_key
    done;
#alert me that the work is done
totem /home/daniele/USB/0016.mp3 &
exit

Но, если у меня есть папка с именем «НЕ УДАЛЯТЬ» в /home/daniele/USB/MASTER, это выдает ошибку из-за имен файлов.

Итак, как я могу решить это? Есть способ заменить все пробелы в $file var на \?

0
задан 10 November 2010 в 12:59

1 ответ

Как насчет этого? Я не знаю, почему вы должны повторять каждый файл и почему вы не можете просто скопировать партию ... Но это должно работать немного лучше, чем при разборе вывода ls.

for usb_key in /media/*;
do
    cp -Ra /home/daniele/USB/MASTER/* $usb_key
    umount /media/$usb_key
done;

#alert me that the work is done
totem /home/daniele/USB/0016.mp3 &
exit

Просто чтобы объяснить, что происходит, для разрывов во всех пробелах при разборе внешнего ввода (как это было с вашим кодом). Вы можете увидеть это в действии, перейдя в каталог с разнесенными файлами и запустив его:

for file in `ls -1`; do echo $file; done

В моем каталоге TV я вижу вывод: способ изменить последовательность прерываний, но проще использовать собственный синтаксис bash для поиска файлов. Или используйте find ... -exec ..., который сам по себе очень мощный.

0
ответ дан 10 November 2010 в 12:59

Другие вопросы по тегам:

Похожие вопросы: