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