Bonjour,
j'ai fais un petit script shell pour faire le listing des fichiers d'un répertoire et le comparer à tous les fichiers de 2 autres répertoire, afin de vérifier s'il trouve 2 fichiers identiques.
Voici mon script:
J'ai l'erreur suivante : diff: "/data/content3/other/log2/perso log/somelog.log": Aucun fichier ou dossier de ce type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #!/bin/bash files1=() files2=() # Directories to compare. Adding quotes at the begining and at the end of each files found in content1 & content3 content2=$(find /data/logs -name "*.log" -type f) content1=$(find /data/other/logs1 -type f | sed 's/^/"/g' | sed 's/$/"/g') content3=$(find /data/other/logs2 -type f | sed 's/^/"/g' | sed 's/$/"/g') # ADDING CONTENT INTO FILES1 & FILES2 ARRAY while read -r line; do files1+=("$line") done <<< "$content1" # content1 and content3 goes into the same array while read -r line3;do files1+=("$line3") done <<< "$content3" while read -r line2; do files2+=("$line2") done <<< "$content2" # Here i'm trying to compare 1 by 1 the files in files2 to all files1 for ((i=0; i<${#files2[@]}; i++)) do for ((j=0; j<${#files1[@]}; j++)) do if [[ -n ${files2[$i]} ]];then diff -s "${files2[$i]}" "${files1[$j]}" > /dev/null if [[ $? == 0 ]]; then echo ${files1[$j]} "est identique a" ${files2[$i]} unset 'files2[$i]' break fi fi done done #SHOW THE FILES THAT DIDN'T MATCHED ANYTHING echo ${files2[@]}
Pourtant le fichier existe quand je fait un ls sur le même chemin:
ll "/data/content3/other/log2/perso log/somelog.log"
-rw-rw-r-- 2 lopom lopom 551M 30 oct. 18:53 '/data/content3/other/logs2/perso log/somelog.log'
J'ai selon moi besoin des guillements car dans certains chemins il peut y avoir des espaces, et diff l'interprète mal.
J'ai essayé de mettre les valeurs dans les tableaux avec des simples guillemets mais ca ne résous pas le problème.
J'espère avoir été assez compréhensible, je reste disponible si vous avez des questions.
Merci par avance
Partager