У меня есть установка, в которую я создаю определенный файл и впоследствии перемещаю его в область хранения для того типа файла (папка A). Существует другая папка на моей машине, где я должен также скопировать файл в (папку B).
Есть ли любой способ сделать установку в который:
Обе папки находятся в той же файловой системе.
Это не должно быть полностью автоматически; я предпочел бы выполнять некоторую команду в терминале для проверки на новые нуждающиеся файлы, которые будут скопированы в Папку B, скопировал бы их и уведомил бы меня, какие файлы были скопированы. Также, если существуют какие-либо файлы в Папке B, которые не находятся в Папке A.
Я выполняю Ubuntu GNOME 15.04 с GNOME Shell и GNOME 3.16.
Другой (Python) опция, предлагая что-то вроде "необычного" отчета:
----------------------------------------------------------
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
----------------------------------------------------------
Это делает то, что Вы описываете:
#!/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*"-")
Скопируйте сценарий в пустой файл, сохраните его как sync_report.py
Тестовый прогон это командой:
python3 /path/to/sync_report.py <folder_a> <folder_b>
Если каталоги содержат пробелы, помещают их между одинарными кавычками.
Если все хорошо работает, используйте его как выше, или:
добавьте следующую команду к сочетанию клавиш:
gnome-terminal -e "'/path/to/sync_report.py' '/path/to/folder_a' '/path/to/folder_b'"
Выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте команду.
Затем когда сочетание клавиш нажимается:
Не позволяйте фону отвлечь Вас, мой терминал является полупрозрачным.:)
С другой стороны, как упомянуто @ParanoidPanda (благодарит упомянуть), добавьте его к Вашему ~/.bashrc
файл. Создайте псевдоним, который называет сценарий:
alias <nameofalias>='python3 /path/to/sync_report.py <folder_a> <folder_b>'
Предупреждение : это для двунаправленной синхронизации, но, учитывая, что Вы в порядке в выполнении вещей вручную... Я не знаю, существует ли опция для однонаправленного поведения в unison
---, если любой знает, не стесняйтесь редактировать этот ответ.
унисон Установки:
sudo apt-get install unison unison-gtk
Создают этот файл в каталоге $HOME/.unison
, называют его test.prf
(или безотносительно)
label = sync folders A and B
root = /home/romano/tmp/folderA
root = /home/romano/tmp/folderB
Выполнение unison
от тире, выбирают Ваш профиль выше и делают первую синхронизацию. У Вас будет графический интерфейс для выбора, что скопировать и где.
После этого, сделайте изменения и когда Вы хотите сохранить в синхронизации, используйте унисон снова. Это позволит Вам решить, что сделать:
Это должно получить Вас движение. zenity
имеет намного больше приложений вне объема Вашего вопроса; настройте это, как Вам нравится.
#!/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
Некоторое объяснение:
ls -1
команды перечисляют имена файлов одна строка за один раз, но только имена, никакая другая информация. Этот сценарий поэтому не заметит, когда файл в одной папке будет более новым, чем одна в другой папке с тем же именем.
Grepping для "<"; даст нам файлы в Папке A, но не в Папке B, и наоборот для">". Вы могли использовать переменные, созданные zenity
для создания команды копии или чего-то еще.
Взгляните на https://github.com/Fitus/Zaloha.sh. Это сценарий оболочки, который исчерпывает поле. Это является интерактивным, таким образом, Вы будете видеть и подтверждать то, что это собирается сделать.