Мне нужно скопировать все файлы и папки «главной» папки во все подключенные 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 на \
?
Как насчет этого? Я не знаю, почему вы должны повторять каждый файл и почему вы не можете просто скопировать партию ... Но это должно работать немного лучше, чем при разборе вывода 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 ...
, который сам по себе очень мощный.