mv erro no shell script “são o mesmo arquivo”

1

Estou tentando obter um script que renomeie e mova vídeos. Aqui está o que eu tenho:

#!/bin/bash

src="/mnt/Files_Apps/temp/"
dest="/mnt/Files_Apps/TFTP root/"

for file in "$src"*.*; do
newfile="${dest}$(date -r "$file" +"%Y-%m-%d %H %M %S").MOV"
mv "$file" "$newfile" 
done

Quando eu depurar a saída, vejo isso:

$ sudo bash -v videorename.sh 

date -r "$file" +"%Y-%m-%d %H %M %S"
mv: '/mnt/Files_Apps/temp/IMG_7662.MOV' and '/mnt/Files_Apps/TFTP root/2016-      05-08 11 57 58.MOV' are the same file
date -r "$file" +"%Y-%m-%d %H %M %S"
mv: '/mnt/Files_Apps/temp/IMG_7687.MOV' and '/mnt/Files_Apps/TFTP root/2016-    05-09 16 03 39.MOV' are the same file
date -r "$file" +"%Y-%m-%d %H %M %S"
date -r "$file" +"%Y-%m-%d %H %M %S"
date -r "$file" +"%Y-%m-%d %H %M %S"
date -r "$file" +"%Y-%m-%d %H %M %S"

Detalhes do diretório src:

ls -lia
total 148402
1443129 drwxrwxrwx  3 chris linuxadmin        0 Oct  9 18:12 .
26870564 drwxrwxrwx 15 chris linuxadmin        0 Oct  5 15:51 ..
1441900 -rwxrwxrwx  1 chris linuxadmin 75031725 May  8 11:57 IMG_7662.MOV
1443124 -rwxrwxrwx  1 chris linuxadmin 76930641 May  9 16:03 IMG_7687.MOV

Eu mudei o conteúdo do diretório de origem várias vezes. Alguns arquivos se engasgam, outros funcionam bem. Eu não consigo entender porque é que certos arquivos (todos em formato MOV importados do meu iphone) são duplicados, especialmente porque estou movendo arquivos para um novo diretório. Qualquer ajuda seria muito apreciada.

    
por cgram 10.10.2016 / 20:08

2 respostas

1

Acontece que a questão girou em torno de como o compartilhamento CIFS foi montado. Parece que o inode foi possivelmente armazenado em cache, tornando a maioria dos arquivos duplicados, pois o script tentou gravar o novo nome de arquivo. Para resolver isso, adicionei 'cache = none' ao fstab e remontei o compartilhamento. Desde então, percorri o script várias vezes sem problemas.

Embora eu saiba qual era o problema, ainda não sei ao certo por que estava em questão. Se alguém tiver uma ideia de como isso afeta a montagem do CIFS, sou todo ouvidos.

    
por cgram 20.10.2016 / 20:00
0

Primeiro, não depure seus scripts usando sudo , nunca!

A expressão "$dir"*.* não significa o que você pensa. Experimente:

echo "$dir"*.*

Para produzir uma lista de arquivos em $dir , use find (consulte man find ):

find "$dir" -type f -print

, que pode ser canalizado para o seu script ou dividido em parâmetros com xargs ( man xargs ).

find e xargs (e sort e alguns outros) podem manipular nomes de arquivos com espaços ( A file name.txt ) usando NUL (0x00) delimitadores. Infelizmente, há uma mistura de opções de linha de commane, ( -0 , -z , --null ), para conseguir isso, veja as páginas man .

    
por waltinator 10.10.2016 / 23:04