LINUX.ORG.RU
ФорумAdmin

Как быстро перенести папку

 


0

2

Структура такая

dir_source
..00
..01
..02
....e0
....d0
..f5
..f6

dir_target
..00
..01
..02
....e0
....d0
..f5
..f6


Нужно быстро перенести все из dir_source в dir_target. MC почему то сначала копирует файл, а потом удаляет из dir_source. Зачем, если нужно просто в ФС сменить запись о местонахождении файла

★★★★
Ответ на: комментарий от aureliano15

Это сложно для меня, к тому же нужно указывать что перезатирать, а что нет. А разве MC не через команду mv делает move?

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Так тебе синхронизировать надо? Тогда используй соответствующие тулзы. В double commander, например есть. Или даже через meld - что бы смотреть в чём разница внутри файла.

anonymous
()
Ответ на: комментарий от Deleted

Но в папках ещё подпапки есть, их нужно создавать(если их нет на target) автоматом, это MC делает

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

подпапки

мамки что ли?

Но в папках ещё подпапки есть, их нужно создавать(если их нет на target) автоматом, это MC делает

ЯННП.

Deleted
()
Ответ на: комментарий от anonymous

Не синхронизировать, я для этого rsync использую. Мне нужно переместить всю иерархию папок без copy & rm, а MC именно это и делает, сначала копирует, потом удаляет, но это долго. Когда просто файл переносишь один, то мгновенно

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

MC именно это и делает

проверил у себя - просто перемещает, не звезди

anonymous
()
Ответ на: комментарий от gobot

нужно указывать что перезатирать, а что нет.

Тогда можно воспользоваться скриптом типа этого:

#!/bin/bash

for i in $(cd "$1"; find | sed 's/^.\///;s/^.$//')
  do
   if [ -d "$1/$i" ]
     then
       if [ ! -d "$2/$i" ]
         then
           mv "$1/$i" "$2/$i"
       fi
   else
       if [ -e "$1/$i" ]
         then
           mv -i "$1/$i" "$2/$i"
       fi
   fi
  done
rm -Rf "$1"

Разумеется, это пример, т. к. во-первых скрипт надо проверять, а во-вторых даже без проверки в нём есть несколько проблем, как то неумение работать с файлами и директориями, содержащими пробелы или начинающиеся с точек, а также при совпадении названия подкаталога в источнике с именем обычного файла в приёмнике. Но это поправимо (если вообще важно). Ну и ещё проверку наличия 2 аргументов добавить надо.

aureliano15 ★★
()
Ответ на: комментарий от Deleted

Если в target уже есть перемещаемая дира, то все равно пишет Directory not empty

gobot ★★★★
() автор топика
Ответ на: комментарий от aureliano15

да, уже написал, без скрипта походу никак не сделать, если дира существует она не перемещается

gobot ★★★★
() автор топика
Ответ на: комментарий от gobot

Каталог это тоже файл. Когда ты его перемещаешь он на самом деле тоже не копируется, а запись о нём переносится в вышестоящий. В таком случае операция объединения каталогов (что ты пытаешься сделать) невозможна. Нужно перемещать файлы источника внутрь назначения.

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY

Поэтому надо делать mv source/* destination

anonymous
()
Ответ на: комментарий от gobot

Кстати у nv куча полезных опций, например

-u, --update move only when the SOURCE file is newer than the destination file or when the destination file is missing

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.