web-dev-qa-db-fra.com

erreur mv dans le script shell "sont le même fichier"

J'essaie d'obtenir un script qui renommera et déplacera les vidéos. Voici ce que j'ai

#!/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

Quand je débogue la sortie, je vois ceci:

$ 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"

Détails du répertoire 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

J'ai changé le contenu du répertoire source plusieurs fois. Certains fichiers sur lesquels il s'étouffe, d'autres fonctionnent correctement. Je n'arrive pas à comprendre pourquoi certains fichiers (tous au format MOV importés de mon iphone) sont dupliqués, surtout que je déplace des fichiers dans un nouveau répertoire. Toute aide serait grandement appréciée.

4
cgram

Il s'est avéré que le problème était de savoir comment le partage CIFS avait été monté. Il semble que l'inode ait probablement été mis en cache, ce qui rend la plupart des fichiers en double lorsque le script tente d'écrire le nouveau nom de fichier. Pour résoudre ce problème, j'ai ajouté 'cache = none' à fstab et j'ai remonté le partage. Depuis, j'ai parcouru le script plusieurs fois sans aucun problème.

Bien que je sache en quoi consistait le problème, je ne suis toujours pas tout à fait sûr de savoir pourquoi cela était en cause. Si quelqu'un a une idée de la façon dont cela affecte le montage CIFS, je suis tout ouïe.

2
cgram

Premièrement, ne déboguez pas vos scripts avec Sudo, jamais!

L'expression "$dir"*.* ne signifie pas ce que vous pensez. Essayer:

echo "$dir"*.*

Pour produire une liste de fichiers dans $dir, utilisez find (voir man find):

find "$dir" -type f -print

qui peut être canalisé dans votre script ou divisé en paramètres avec xargs (man xargs).

find et xargs (et sort et quelques autres) peuvent gérer les noms de fichiers avec des espaces (A file name.txt) à l'aide de délimiteurs NUL(0x00). Malheureusement, il existe un mélange de commutateurs de ligne de communication, (-0, -z, --null), pour cela, voir les pages man.

1
waltinator