Список аргументов слишком длинный и копируется в Samba Share

Список аргументов слишком длинный и копируется в Samba Share

Ubuntu 12.04 LTS 64 бит.

Я пытаюсь сделать запланированное задание копирования из каталога с тысячами файлов в общий ресурс Samba (пропуская дубликаты). Я сопоставил свой общий ресурс Samba через GUI.

Команда, которую я попробовал:

cp /home/security/Brick/* ~/.gvfs/"камера на atm-bak-01.local/Brick" -n

Я нашел это, но не знаю, как изменить синтаксис на нужный мне.

найти -maxdepth 1 -name '*.prj' -exec mv -t ../prjshp {} +

Любые подсказки будут высоко оценены.

решение1

Проблема в том, что оболочка расширяет ваш /home/security/Brick/*список файлов длинным (слишком длинным)допередаю его cp.

Если вы хотите скопировать весь Brickкаталог, возможно, самым простым будет:

cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/

используя флаг "recursive" для cp. Это скопирует всю структуру в Brick, также (включая подкаталоги).

Одним из вариантов является использование forцикла:

for file in /home/security/Brick/*; 
do
cp -n $file ~/.gvfs/"cam on atm-bak-01.local/Brick"
done

Или с помощью find:

find /home/security/Brick/ -type f -exec cp -n {} ~/.gvfs/"cam on atm-bak-01.local/Brick" \;

В этой команде -type fуказано выбрать только файлы (без каталогов), затем для каждого файла выполняется указанная команда: {}заменяется именем файла, а \;— точкой с запятой, необходимой для закрытия -execпредложения, экранированной, в противном случае оболочка интерпретирует ее (и удалит).

Команда после -execможет быть любой, какой вы захотите (например, вместо cp -nвы можете использовать cp -avдля копирования в режиме архива (включая временные метки и правила) и перезаписи, или вы можете использовать другие команды (но: вам следует прежде всего понять экранирование оболочки, подстановку символов и кавычки, иначе вы можете нанести большой вред --- см. например"изучение оболочки").

Find — очень мощная команда — ее стоит хорошо изучить. Я нашел интересные руководстваздесь,здесьиздесь.

О создании резервной копии с помощью cp -n:

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

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

rsync -azvv  /home/security/Brick   ~/.gvfs/"cam on atm-bak-01.local/Brick"

(будьте внимательны и не добавляйте завершающий символ "/" в конце --- иначе rsync создаст подкаталог Brick/Brick. Да, rsyncэто мощный инструмент, но иногда он довольно капризный.)

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

Связанный контент