Сервер Офисных коммуникаций не мог бы быть настолько дорогим. Если Ваша компания лицензировала Версию для предприятия Office, она уже идет с Лицензией на клиентский доступ для Коммуникатора.
Это делает цену OCS только 700$ (для сервера), даже если у Вас есть тысячи клиентов.
Пища для размышления.
a/b' to
a2/b': Каталог, не пустой
– Thomas Vander Stichele
12 June 2009 в 12:47
допустить ошибку
mv dir1/* dir2/
или просто
rsync -arv --remove-source-files tree1/* tree2
должен быть достаточно, Вы, вероятно, столкнетесь с проблемой в какой-то момент, когда слишком много записей будут в dir1
.
find sourcedir -maxdepth 1 -exec echo mv {} targetdir/ \;
должны быть хорошие опции
find sourcedir -maxdepth 1 -print0 |xargs -0 -I _ echo mv _ targetdir
find sourcedir -maxdepth1 -exec mv {} targetdir/ +
оба не действительно необходимы, потому что mv просто выбирает 2 варианта (исходная цель), таким образом, необходимо будет жить со множеством процессов в этом случае.
cd /tree1
mv * /tree2
Это не переместит скрытые файлы или папки, но Ваш исходный пример не был бы также.
переключитесь на каталог, который Вы хотите переместить и сделать
tar cf - * | ( cd /target; tar xfp -)
Более быстрый, чем mv...
Вы можете использовать "cp -l & rm" для перемещения внутри устройства:
cp -alv --backup=numbered tree1/* tree2 &&
rm -rf tree1/
-l
of cp
, чтобы использовать жесткие ссылки вместо копирования, (это также предотвращает операции между устройствами) - backup = numbered
из cp
для резервного копирования существующих файлов в целевом каталоге И будьте осторожны с этими двумя проблемами:
&&
, чтобы предотвратить удаление ваших нескопированных данных, если вы случайно запустите их на разных устройствах. (в случае corss-device cp
завершается со статусом « 1
», по крайней мере для GNU coreutils) .
» в tree1
, вы потеряете их, если они есть. Ответ Хавьера с поиском работает хорошо, за исключением того, что он не удаляет исходные каталоги. Добавьте в конце:
rmdir $(find . -type d |grep -v ^\.$)
Я думаю, что mv не делает то, что вы думаете.
Файловая система unix состоит из 3 компонентов:
A запись в каталоге указывает на индексный дескриптор.
В индексном дескрипторе есть метатаданные о файле (это файл, каталог, именованный канал? Кто им владеет? Какие разрешения? Какие блоки использует этот индексный дескриптор?
Блоки - это вещи, которые фактически содержат содержимое файла.
Итак - когда вы "mv" файл, все, что вы на самом деле делаете, это отсоединяете первую запись каталога и повторно связываете ее в другом месте.
snoopy -> inode 333
woodstock -> inode 333
Никакие данные никогда не дублируются / копируются. Вы создайте ссылку snoopy, затем вы создаете ссылку woodstock, а затем удалите ссылку snoopy. (с каталогами все немного иначе, потому что обычно вы не можете создавать каталоги с жесткими ссылками, но даже при этом название "ссылки" просто меняется).
Что делать, если вы переходите с одной файловой системы на другую? Раньше mv просто выдавал ошибку и явно указывал, что вы не можете переместить файл из одной файловой системы в другую. В наши дни кажется, что mv молча копирует данные, а затем удаляет оригинал.
В старые времена, поскольку вы не могли перемещать данные из одной файловой системы в другую, у вас была привычка используя идиомы вроде
tar -cf -. | (cd / new / location && tar -xf -)
затем вы удаляете старые данные. Отчасти причиной использования tar было то, что раньше cp уничтожал такие метаданные, как «это символическая ссылка» и «это жесткая ссылка», и вместо этого вы просто получали бы новые копии этого файла как обычные файлы. Тем не менее, вам нужно дать "cp" flags, чтобы указать ему сохранить такую структуру.
Невозможно избежать «перемещения» большого количества данных, если они находятся из одной файловой системы в другую. Неважно, используете ли вы новый ход, rsync, tar или cpio.
Но если вы храните все данные в одной файловой системе, это:
mv / filesystem-1 / big / directory * / filesystem-1 / big2 /
, который будет очень быстрым, потому что он просто меняет записи каталога, а не перемещает реальные данные.
Есть и другие проблемы, например, что делать, если они есть уже есть файл / каталог в новом месте, а также в исходном местоположении?
Ни один из ответов в этой ветке не подходит для моего варианта использования, поэтому я придумал один из них самостоятельно в качестве скрипта оболочки.
В основе этого лежит эта функция:
recurse() {
if [ ! -d "$1" ] || [ ! -e "$2" ]; then
mv -u "$1" "$2" || exit
return
fi
for entry in "$1/"* "$1/."[!.]* "$1/.."?*; do
if [ -e "$entry" ]; then
recurse "$entry" "$2/${entry##"$1/"}"
fi
done
}
Которую вы можете вызвать следующим образом (для варианта использования OP):
recurse a/b/c2 a2/b/c2
Если источником является файл или каталог, для которого еще не существует место назначения, он просто перемещает его с помощью mv -u
. Если источник является каталогом, для которого уже существует место назначения, он перебирает его содержимое и рекурсивно выполняет ту же проверку, за которой следует перемещение | рекурсия для каждого из его членов.
Я использовал -u
, потому что мне нужно было только обновить старые файлы и не трогать новые, но вы могли заменить его на -f
для безусловного перемещения или -i
для интерактивного. Или ничего не меняйте и просто rm -rf
ваш источник после того, как скрипт завершит перемещение вещей.
a/b' to
a2/b': Каталог, не пустой [thomas@ana ~] $ mv-u-T a2 mv: не может переместитьсяa' to
a2': Каталог, не пустой – Thomas Vander Stichele 12 June 2009 в 12:42