Ubuntu 12.04 LTS 64 бит.
Я пытаюсь скопировать запланированное задание из каталога с тысячами файлов на общий ресурс samba (при этом пропуская дубликаты). Я отобразил свой общий ресурс Samba через графический интерфейс.
Команда, которую я пробовал:
cp / home / security / Brick / * ~ / .gvfs / "cam on atm-bak-01.local / Brick" -n
Я нашел это, но я не знаю, как изменить синтаксис на то, что мне нужно.
find -maxdepth 1 -name '* .prj' -exec mv -t ../prjshp {} +
Любые советы приветствуются.
Проблема в том, что оболочка расширяет ваш /home/security/Brick/*
длинным (слишком длинным) списком файлов перед тем, как передает его в cp
.
Если вы хотите скопировать весь каталог Brick
, возможно, самым простым будет:
cp -rn /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local"/
с использованием флага «рекурсивный» в 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
не будет перезаписывать существующие файлы, поэтому, если вы сделаете изменения файла в локальном каталоге, который был скопирован ранее не будет копироваться снова ... и у вас будет в резервной копии его старая версия.
По этой причине я рекомендую использовать утилиту резервного копирования или синхронизации, например Unison или rsync , чтобы сделать это орк. Эти утилиты просто обновят измененные файлы, могут минимизировать количество операций записи (и, следовательно, пропускную способность сети), и, как правило, намного безопаснее. Резервное копирование может быть решено с помощью rsync
, просто сказав:
rsync -azvv /home/security/Brick ~/.gvfs/"cam on atm-bak-01.local/Brick"
(будьте осторожны, не добавляйте финальный символ "/" в конце --- или rsync создаст подкаталог Brick / Brick. Да , rsync
является мощным и довольно темпераментным.)
У Unison есть хороший графический интерфейс, и он также скажет вам, есть ли конфликтующие изменения в вашем хранилище - так что это будет мой предпочтительный вариант. [+1139]
:-
в моем комментарии выше должен был быть:-0
} – Random832 9 May 2015 в 21:02