Команда mv сообщает: «X и Y - один и тот же файл», файловая система cifs

1670
cgram

Я пытаюсь получить скрипт, который будет переименовывать и перемещать видео. Вот что у меня есть:

#!/bin/bash  src="/mnt/Files_Apps/temp/" dest="/mnt/Files_Apps/TFTP root/"  for file in "$src"*.*; do newfile="$$(date -r "$file" +"%Y-%m-%d %H %M %S").MOV" mv "$file" "$newfile" done 

Я менял содержимое исходного каталога несколько раз. Одни файлы давятся, другие работают нормально. Я не могу понять, почему он видит определенные файлы (все в формате .MOV, импортированные из моего iPhone) как дубликаты.

Выход mount:

//GRAMNAS/Files_Apps on /mnt/Files_Apps type cifs (rw,relatime,vers=1.0,sec=ntlm,cache=strict,username=xxxxx,uid=1208001104,forceuid,gid=1208001114,forcegid,addr=x.x.x.x,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=1048576,actimeo=1) 

ls -li на src перед запуском скрипта:

~/.scripts$ ls -li /mnt/Files_Apps/temp/ total 697384 13238340 -rwxrwxrwx 1 chris linuxadmin 8844047 Jul 19 21:39 IMG_5624.MOV 13238349 -rwxrwxrwx 1 chris linuxadmin 96701684 Apr 14 11:58 IMG_7355.MOV 13238366 -rwxrwxrwx 1 chris linuxadmin 98690685 Apr 17 15:06 IMG_7426.MOV 13238384 -rwxrwxrwx 1 chris linuxadmin 100289499 May 5 14:32 IMG_7568.MOV 13238579 -rwxrwxrwx 1 chris linuxadmin 75031725 May 8 11:57 IMG_7662.MOV 13239032 -rwxrwxrwx 1 chris linuxadmin 86233885 May 9 10:13 IMG_7672.MOV 13239098 -rwxrwxrwx 1 chris linuxadmin 76930641 May 9 16:03 IMG_7687.MOV 13239466 -rwxrwxrwx 1 chris linuxadmin 78796811 May 13 13:22 IMG_7806.MOV 13240809 -rwxrwxrwx 1 chris linuxadmin 92599209 May 14 12:39 IMG_7951.MOV 

ls -li на dest перед запуском скрипта:

~/.scripts$ ls -li /mnt/Files_Apps/TFTP\ root/ total 0 

Вывод скрипта:

~/.scripts$ bash -v videorename.sh date -r "$file" +"%Y-%m-%d %H %M %S" mv: '/mnt/Files_Apps/temp/IMG_5624.MOV' and '/mnt/Files_Apps/TFTP root/2016-07-19 21 39 21.MOV' are the same file date -r "$file" +"%Y-%m-%d %H %M %S" mv: '/mnt/Files_Apps/temp/IMG_7355.MOV' and '/mnt/Files_Apps/TFTP root/2016-04-14 11 58 26.MOV' are the same file date -r "$file" +"%Y-%m-%d %H %M %S" mv: '/mnt/Files_Apps/temp/IMG_7426.MOV' and '/mnt/Files_Apps/TFTP root/2016-04-17 15 06 35.MOV' are the same file date -r "$file" +"%Y-%m-%d %H %M %S" . . . 

ls -li на src после запуска скрипта:

~/.scripts$ ls -li /mnt/Files_Apps/temp/ total 697384 13238340 -rwxrwxrwx 1 chris linuxadmin 8844047 Jul 19 21:39 IMG_5624.MOV 13238349 -rwxrwxrwx 1 chris linuxadmin 96701684 Apr 14 11:58 IMG_7355.MOV 13238366 -rwxrwxrwx 1 chris linuxadmin 98690685 Apr 17 15:06 IMG_7426.MOV 13238384 -rwxrwxrwx 1 chris linuxadmin 100289499 May 5 14:32 IMG_7568.MOV 13238579 -rwxrwxrwx 1 chris linuxadmin 75031725 May 8 11:57 IMG_7662.MOV 13239032 -rwxrwxrwx 1 chris linuxadmin 86233885 May 9 10:13 IMG_7672.MOV 13239098 -rwxrwxrwx 1 chris linuxadmin 76930641 May 9 16:03 IMG_7687.MOV 13239466 -rwxrwxrwx 1 chris linuxadmin 78796811 May 13 13:22 IMG_7806.MOV 13240809 -rwxrwxrwx 1 chris linuxadmin 92599209 May 14 12:39 IMG_7951.MOV 

ls -li на dest после запуска скрипта:

~/.scripts$ ls -li /mnt/Files_Apps/TFTP\ root/ total 0 
1
Это иррационально. Вы используете RedHat или связанный дистрибутив? Кажется, в этой области есть известные проблемы, такие как [this] (https://access.redhat.com/solutions/1284993), без текущего решения. Я сам на Ubuntu, и я никогда не видел это сообщение, несмотря на частое использование `mv`. Я не могу легко проверить, не используете ли вы производную от Debian систему. Вы можете попробовать перейти на другую файловую систему и обратно: я инстинктивно чувствую, что это может быть обходной путь, но я не могу проверить, и вы не узнаете, пока не попробуете. AFH 7 лет назад 0
Я на последней Ubuntu cgram 7 лет назад 0
Я на Ubuntu 16.04.1, и я никогда не видел ничего подобного. Единственное возможное объяснение, которое я могу придумать, - это наличие каких-либо ссылок (символических или жестких) между файлами или каталогами. AFH 7 лет назад 0
@cgram: (1) я отредактировал твой вопрос. Я изменил `` на `$ `, потому что вы никак не могли бы получить результаты, о которых вы сообщаете, без `$`. (PS Вместо этого вы могли бы использовать `$ dest`. Вам вряд ли понадобятся фигурные скобки; см. [Это] (http://unix.stackexchange.com/q/32210/23408#286525).) в вашем вопросе нет других опечаток. (2) Можете ли вы сделать `ls -li` для исходных и целевых каталогов до и после запуска вашего скрипта и опубликовать вывод? Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным и полным. Scott 7 лет назад 0
@ Скотт ... спасибо за исправление, но у меня был $ в моем реальном сценарии ... вопрос был просто опечаткой ... извинения. Я сделал еще один раунд тестов и обновил вопрос с результатами вместе с ls -li до / после запуска скрипта. Что интересно, если я возьму пробелы из нового файла: "newfile =" $ (date -r "$ file" + "% Y-% m-% d-% H-% M-% S"). MOV "", это работает просто отлично. cgram 7 лет назад 0

2 ответа на вопрос

1
cgram

Оказывается, проблема заключалась в том, как был смонтирован общий ресурс CIFS. Похоже, что inode, возможно, кэшировался, таким образом рендеринг большинства файлов дублировался, когда скрипт пытался записать новое имя файла. Чтобы решить эту проблему, я добавил «cache = none» в fstab и перемонтировал общий ресурс. С тех пор я пробежался по сценарию несколько раз без проблем.

Хотя я знаю, ЧТО это была за проблема, я все еще не совсем уверен, ПОЧЕМУ она была в проблеме. Если у кого-то есть понимание того, как это влияет на монтировку CIFS, я весь в ушах.

0
yarl

Пространства не так утомительны:

#!/bin/bash  src="/mnt/Files_Apps/temp/" dest="/mnt/Files_Apps/TFTP root/"  for file in "$src"*.*; do newfile="$$(date -r "$file" +"%Y-%m-%d %H %M %S").MOV" mv "$file" "$newfile" done 

Скажи мне, если это решит твою проблему. По крайней мере, это проще.

Это чище, спасибо. Тем не менее, я все еще получаю ту же ошибку: mv: '/mnt/Files_Apps/temp/IMG_8431.mov' и '/ mnt / Files_Apps / TFTP root / 2016-05-25 18 08 23.MOV' являются одним и тем же файлом cgram 7 лет назад 0
Вы пытались сделать М.В. вручную? Если это не сработает, попробуйте создать файл назначения пустым, а затем сделать mv? yarl 7 лет назад 0
Я только что ... и это работает. Это должен быть способ, которым цикл обрабатывает пробелы, я просто не могу понять, в чем проблема. cgram 7 лет назад 0
Вы скопировали мой код, верно? yarl 7 лет назад 0
Я скопировал / вставил твой код. Странно, что я получаю эту ошибку только для одного файла. Если я очищаю каталог назначения и запускаю сценарий только для этого файла, я все равно получаю сообщение об ошибке. И что бы это ни стоило ... то же самое происходит, если я изменяю "mv" на "cp". cgram 7 лет назад 0
Можете ли вы редактировать свой вопрос с новой информацией? новый код, новые тесты. Также добавьте файловую систему (ы), которую вы используете (lsblk -f). yarl 7 лет назад 0
Ярл ... Я обновил оригинальный вопрос с текущим кодом и недавним выводом. Я в тупике. cgram 7 лет назад 0
Еще одна оговорка .... если я перезагружаю коробку, а затем перезапускаю скрипт (не меняя ничего в каталогах source или dest), он неожиданно работает. Может быть что-то кешируется, что вызывает это? cgram 7 лет назад 0
Можете ли вы отредактировать свой пост с соответствующей частью вывода "mount"? yarl 7 лет назад 0
Я предполагаю, что ты это имел ввиду? cgram 7 лет назад 0
еще один фрагмент информации .... если я уберу пробелы в новом файле "newfile =" $ (date -r "$ file" + "% Y-% m-% d-% H-% M-% S ") .MOV" ", это работает просто отлично. cgram 7 лет назад 0
Да, это то, что я имел в виду. Я не знаю достаточно CIFS. Я не могу больше пытаться помочь. yarl 7 лет назад 0

Похожие вопросы