LINUX.ORG.RU

mv .. are the same file

 , ,


0

2

В скрипте происходит перемещение файла.

Смонтирована SMB папка.

Заданы переменные.

src_dir=/mnt/folder1/ dst_dir=/mnt/filder1/spool/

Выполняется команда: mv $src_dir/*.zip $dst_dir

При выполнении скрипта всё окей. Перемещение проходит корректно.

Но если вытащить вручную этот файл из папки spool и переложить обратно в folder1, то при выполнении скрипта, выдаёт: ....are the same file.

На момент выполнения папка Spool пустая, то есть не идёт перезапись.

включи set -x и посмотри внимательно, что на самом деле у тебя выполняется. Может * неправильно раскрывается, а может ты в путях напутал (в посте у тебя опечатка «filder1»).

Тут только проверять выполнение по шагам и искать либо свой косяк, либо аномалию/баг.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Нет, опечаток точно нет.

Выполняю вручную без скрипта

mv test.zip /mnt/folder1/spool

Перемещение выполнилось.

Через Windows переместил файл обратно.

Выполнил ls -a /mnt/folder1/spool - пусто

Выполняю команду mv test.zip /mnt/folder1/spool повторно, получаю are the same file

Если выполнить mv -f test.zip /mnt/folder1/spool, проблема не решается

Если выполнить mv -f test.zip /mnt/folder1/spool test.zip, то перемещение проходит корректно.

Но в моём случае файл не имеет статичного имени и требует использовать *zip

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

Это какая-то SMB-специфичная хрень. Какое-то кеширование, возможно. Добавь smb/samba в теги, может кто-нибудь кто разбирается в этом вендоговне подписан на тег.

А, и ещё:

Если выполнить mv -f test.zip /mnt/folder1/spool test.zip, то перемещение проходит корректно.

— эта команда не имеет смысла и не должна работать.

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Нашёл парочку подобных случаев, вроде бы решалось перемонтирование smb с параметром cache=none.

Попробовал.

mount -t cifs -o username=foo, password=bar, rw, cache=none ../../..

Что то без изменений.

maxim2049 ()
Ответ на: комментарий от funky

После проведения тестов:

Если выполнить на linux - mv $src_dir/*.zip $dst_dir

После выполнить перемещение обратно mv mv $dst_dir/*.zip $src_dir

А после снова mv $src_dir/*.zip $dst_dir

То ошибка не возникает.

То есть ошибка возникает, только если из папки назначения переместить файлы вручную из под windows.

Так же заметил, что ошибка возникает только именно при перемещении (вырезать-вставить).

То есть, если взять перемещённый файл из папки spool, скопировать его в folder1, а после в spool его удалить, то в дальнейшем команда mv выполняется без проблем.

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

Так же заметил, что ошибка возникает только именно при перемещении (вырезать-вставить).

то есть винда перемещает файл таким образом, что для клиента под линуксом этот файл остается там виден. не в буквальном смысле виден, а при попытке записи файла происходит такой возрат команде mv, который интерпретируется как будто файл там есть.

nerve ★★ ()

lsattr $DEST_DIR

Думаю, что при перемещении файла назад в Windows OS не меняются аттрибуты «файла папки» в Linux-OS. И потом при попытке командой mv переместить файл - считиваются атрибуты и он там уже есть.

В данном случае могу посоветовать:

  • переместить файл из $SRC_DIR в $DEST_DIR
  • посмотреть lsattr $DEST_DIR
  • из Windows-OS переместить файл из $DEST_DIR куда угодно
  • посмотреть lsattr $DEST_DIR

Если в атрибутах осталась запись об «файле, которого нет» копать в ту сторону.

Как вариант, вместо mv попробовать использовать rsync

i3wm ()