USBフラッシュドライブのコンテンツをホームディレクトリの定義済みフォルダに自動的にコピーするようにUbuntuをプログラムしたい。
のときに自動的にこれを実行したい フラッシュドライブが接続されています(特定のドライブだけではありません)。
承認された回答:
以下のスクリプトは、このスクリプトの反対の変形です。その1つは指定されたに作用します ドライブの場合、このスクリプトはすべてのを除くすべてに作用します 指定された(usb)ドライブ。
機能
- 外部USBストレージデバイスが接続されているときはいつでも、スクリプトはそのコンテンツをユーザーが定義したディレクトリにコピーします(スクリプトのヘッドセクション:
target_folder =
)。サブディレクトリは、コピー元のドライブの名前で作成されます。 - ターゲットフォルダ(ディスクのコンテンツの以前のコピー)が存在する場合、それは以前のコピーを上書きします。
- エントリを追加しました
excluded =
、ここに「通常の」(永続的な)USBデバイスの名前をリストできます(おそらくそうすべきです)(「通常の」ドライブはすでに自動的に除外されています)。 Ubuntuは主にファイルシステムによってデバイスのタイプを定義しているようです。フラッシュドライブをext4
としてフォーマットすることをテストしました 、フラッシュドライブではなく「通常の」ドライブとして表示されました。
スクリプト
#!/usr/bin/env python3
import subprocess
import time
import shutil
#--
target_folder = "/path/to/target_folder"
excluded = ["media_extern"]
#--
def get_mountedlist():
return [(item.split()[0].replace("├─", "").replace("└─", ""),
item[item.find("/"):]) for item in subprocess.check_output(
["/bin/bash", "-c", "lsblk"]).decode("utf-8").split("n") if "/" in item]
def identify(disk):
command = "find /dev/disk -ls | grep /"+disk
output = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8")
if "usb" in output:
return True
else:
return False
done = []
while True:
mounted = get_mountedlist()
new_paths = [dev for dev in get_mountedlist() if not dev in done and not dev[1] == "/"]
valid = [dev for dev in new_paths if (identify(dev[0]), dev[1].split("/")[-1] in excluded) == (True, False)]
for item in valid:
target = target_folder+"/"+item[1].split("/")[-1]
try:
shutil.rmtree(target)
except FileNotFoundError:
pass
shutil.copytree(item[1], target)
done = mounted
time.sleep(4)
使用方法
スクリプトを空のファイルにコピーします。ヘッドセクションで、次のように設定します。
-
挿入したフラッシュドライブのコピーを保存する場所へのパス
target_folder = "/path/to/directory"
-
永続的に接続されている可能性のあるデバイスの名前(
lsblk
を使用) わからない場合)excluded = ["media_extern", "<some_other_drive>"]
たとえば :
sdb 8:16 1 471M 0 disk └─sdb1 8:17 1 471M 0 part /media/jacob/19C3-0A41 sdc 8:32 0 698,6G 0 disk └─sdc1 8:33 0 698,6G 0 part /media/jacob/media_extern sr0 11:0 1 1024M 0 rom
私の
lsblk
の出力で 、2つのデバイスがあります:19C3-0A41
およびmedia_extern
。最後の1つは、除外したい永続的に接続されているディスクです:excluded = ["media_extern"]
スクリプトをcopy_flash.py
として保存します 、実行者:
python3 /path/to/copy_flash.py
必要に応じて、スタートアップアプリケーションに追加します。[ダッシュ]>[スタートアップアプリケーション]>[追加]
関連:Ubuntuでメールアイコンインジケータアプレットを削除する方法は?