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

Мне нужно скопировать все файлы и папки "главной" папки во все подключенные 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 вар с \?

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

В моей телевизионной директории я вижу вывод как:

The
Big
Bang
Theory
The
Cleveland
Show
The

Я думаю, что есть способ изменить последовательности перерывов, но проще использовать собственный синтаксис поиска файлов bash. Или использовать find ... -exec ... который сам по себе очень мощный.

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