特定のファイルを作成し、その後、その種類のファイル(フォルダーA)のストレージエリアに移動するセットアップがあります。私のマシンには別のフォルダーがあり、そこにもファイルをコピーする必要があります(フォルダーB)。
次のようなセットアップを行う方法はありますか?
両方のフォルダーは同じファイルシステムにあります。
完全に自動である必要はありません。ターミナルでいくつかのコマンドを実行して、フォルダーBにコピーする必要がある新しいファイルを確認し、それらをコピーして、どのファイルがコピーされたかを通知することをお勧めします。また、フォルダーAにないフォルダーBにファイルがある場合.
Ubuntu GNOME 15.04、GNOME Shell、およびGNOME 3.16を実行しています。
もう1つの(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
コマンドは、一度に1行ずつファイル名をリストしますが、名前のみをリストし、他の情報はリストしません。したがって、このスクリプトは、あるフォルダー内のファイルが、同じ名前を持つ他のフォルダー内のファイルよりも新しい場合には気づきません。
「<」をグレープすると、フォルダーAのファイルが得られますが、フォルダーBのファイルは得られません。「>」の場合も同様です。 zenity
によって作成された変数を使用して、コピーコマンドなどを作成できます。