J'ai une configuration dans laquelle je crée un certain fichier, puis le déplace dans une zone de stockage pour ce type de fichier (dossier A). Il y a un autre dossier sur ma machine où je dois également copier le fichier (dossier B).
Y a-t-il un moyen de faire un montage dans lequel:
Les deux dossiers sont sur le même système de fichiers.
Il n'est pas nécessaire que ce soit entièrement automatique. Je préférerais exécuter une commande dans le terminal pour vérifier si de nouveaux fichiers doivent être copiés dans le dossier B, les copier et me notifier les fichiers copiés. Également s'il y a des fichiers dans le dossier B qui ne sont pas dans le dossier A.
J'utilise Ubuntu GNOME 15.04, avec GNOME Shell et GNOME 3.16.
Une autre option (python), offrant un peu de "fantaisie" rapport:
----------------------------------------------------------
Newly copied from /home/jacob/map 1 to /home/jacob/map 2:
- Naamloos document
- pscript_2.py
- test123
- monkey_out.txt
----------------------------------------------------------
Unique files in /home/jacob/map 2:
- file_in_targetfolder
----------------------------------------------------------
Il fait ce que tu décris:
#!/usr/bin/env python3
import sys
import os
import shutil
folder_1 = sys.argv[1]; folder_2 = sys.argv[2]
files_1 = os.listdir(folder_1); files_2 = os.listdir(folder_2)
# make the length (n) of separating line "smart"
s = "\nNewly copied from "+folder_1+" to "+folder_2+':'; n = len(s)
print("\n"+n*"-"+s)
for f in files_1:
f1 = folder_1+"/"+f
if all([os.path.isfile(f1), not f in files_2]):
shutil.copyfile(f1, folder_2+"/"+f)
print("-",f)
print(n*"-"+"\nUnique files in "+folder_2+":")
for f in files_2:
f2 = folder_2+"/"+f
if all([os.path.isfile(f2), not f in files_1]):
print("-",f)
print(n*"-")
Copiez le script dans un fichier vide, enregistrez-le sous le nom sync_report.py
Testez-le avec la commande:
python3 /path/to/sync_report.py <folder_a> <folder_b>
Si les répertoires contiennent des espaces, placez-les entre guillemets simples.
Si tout fonctionne bien, utilisez-le comme ci-dessus ou:
ajoutez la commande suivante à une touche de raccourci:
gnome-terminal -e "'/path/to/sync_report.py' '/path/to/folder_a' '/path/to/folder_b'"
Choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande.
Ensuite, lorsque vous appuyez sur la combinaison de touches:
Ne laissez pas l’arrière-plan vous distraire, mon terminal est semi-transparent. :)
Alternativement, comme mentionné par @ParanoidPanda (merci de le mentionner), ajoutez-le à votre fichier ~/.bashrc
. Créez un alias qui appelle le script:
alias <nameofalias>='python3 /path/to/sync_report.py <folder_a> <folder_b>'
Avertissement : ceci est destiné à la synchronisation bidirectionnelle, mais étant donné que vous êtes ok pour faire les choses manuellement ... Je ne sais pas s'il existe une option pour unidirectionnel comportement dans unison
--- si quelqu'un le sait, n'hésitez pas à modifier cette réponse.
Installez à l'unisson:
Sudo apt-get install unison unison-gtk
Créez ce fichier dans le répertoire $HOME/.unison
, appelez-le test.prf
(ou autre)
label = sync folders A and B
root = /home/romano/tmp/folderA
root = /home/romano/tmp/folderB
Lancez unison
à partir du tiret, choisissez votre profil ci-dessus et effectuez une première synchronisation. Vous aurez une interface graphique pour choisir quoi copier et où.
Après cela, effectuez les modifications et, lorsque vous souhaitez rester synchronisé, utilisez à nouveau l'unisson. Cela vous permettra de décider quoi faire:
Cela devrait vous aider. zenity
a de nombreuses autres applications qui dépassent le cadre de votre question. personnalisez ceci comme vous voudrez.
#!/bin/bash
ls -1 ./FolderA | sort > FolderA.txt
ls -1 ./FolderB | sort > FolderB.txt
FILESTOCOPY=$(diff FolderA.txt FolderB.txt | grep \< | awk '{print $2;}' | zenity --list --title="Select files to be copied" --co$
echo $FILESTOCOPY
NEWFILES=$(diff FolderA.txt FolderB.txt | grep \> | awk '{print $2;}' | zenity --list --title="New files in Folder B" --column="f$
echo $NEWFILES
Quelques explications:
Les commandes ls -1
répertorient les noms de fichier ligne par ligne, mais uniquement les noms, sans autre information. Ce script ne remarquera donc pas lorsqu'un fichier dans un dossier est plus récent qu'un fichier dans l'autre dossier portant le même nom.
Grepping pour "<" nous donnera des fichiers dans le dossier A mais pas dans le dossier B, et inversement pour ">". Vous pouvez utiliser les variables créées par zenity
pour créer une commande de copie ou autre chose.