Paepoi » Fedora Tips » Fedora Tips | Nautilus をスクリプトで拡張
Fedora Tips | Nautilus をスクリプトで拡張
# 最終更新日 2019.12.15
Nautilus はスクリプトを利用して簡単に拡張できます。
シェルスクリプトだけでなく Python, Gjs 等も使えます。
又このディレクトリにサブディレクトリを作ればメニューに展開されます。
実行パーミッションを与えるにはスクリプトに chmod +x コマンド。
GUI で個別にやりたいならコンテキストメニューからプロパティを選んで
[プログラムとして実行できる] にチェックを入れます。
環境変数として以下が用意されております。
実行可能パーミッションを与えた時点でコンテキストメニューに即時で追加されます。
右クリック、MacBook に入れているなら二本指タップで出るメニューです。
何も選択していないとこのメニューは出ません
一つ登録した後なら下画像のように「このフォルダーを開く」メニューも利用できるようになります。
ファイルを送る形なので普通にファイル名が起動パラメータとして取得もできます。
bash の場合 $@ で取得できます。
3.18 からはファイル名のアンダーバーをニーモニックとして使えるようになりました。
(Alt キーとアンダーバーの次のアルファベットキーで実行できる機能)
3.24 からは名前順に並ぶようになった。
拡張子は不要、シバンは必ず書いてください(UNIX のお約束)
お好みの言語を利用して作ってください。
*.html や実行パーミッションを付けた *.py を一発で gedit で開く
以下ならファイル名に半角空白があっても開くことが可能
つまり Windows の「送る」みたいなランチャになる
よく使うものはどんどん登録してしまおう
zip 展開で cp932(Shift-JIS じゃない!)なファイル名の時
Fedora の unzip もパッチが当たっているので実は以下で文字化けさせず展開できる
3.22 で改悪されたファイル圧縮機能がショボすぎる...
以下で以前と同じダイアログが出せる、file-roller に送っていただけだったのね
圧縮形式を固定しディレクトリ名で一発作成
実行パーミッションを一発で切り替える
デジカメや iPhone から画像を転送すると拡張子が大文字(*.JPEG)になっている
それらをまとめて小文字(*.jpg)に変更
ディレクトリ内の無作為なファイル名画像が膨大な数に!
ということがよくあるのは筆者だけ?
とりあえずゼロ詰めな連番にしてしまおう、という場合用
大きな画像へのリンク用の小さな画像作り(jpeg, png 限定)
生成する画像の名前は Wordpress が付ける名前っぽいサイズを付加する例
fstring を使っていますので Python 3.6 以降で
ffmpeg を使って H.264 + aac (or mp3) の FLV や MOV 動画を MP4 コンテナに変更
Finder や Explorer でもサムネイル可能になるメリットがある
ffmpeg を使って動画ファイルを結合
ファイル名で勝手にソートされるのでその順番で結合されます
動画の回転 (90°)
動画の回転 (180°)
動画の回転 (270°)
[管理者権限でファイルを開く] は Fedora27 からできなくなったので削除しました
gnome-terminal で開く機能は Nautilus に統合されたので削除しました
Nautilus はスクリプトを利用して簡単に拡張できます。
シェルスクリプトだけでなく Python, Gjs 等も使えます。
利用方法
ファイルマネージャが Nautilus なら以下のディレクトリが最初からあるはずです。~/.local/share/nautilus/scriptsココに実行可能パーミッションを与えたスクリプトファイルを置くだけです。
又このディレクトリにサブディレクトリを作ればメニューに展開されます。
実行パーミッションを与えるにはスクリプトに chmod +x コマンド。
GUI で個別にやりたいならコンテキストメニューからプロパティを選んで
[プログラムとして実行できる] にチェックを入れます。
環境変数として以下が用意されております。
NAUTILUS_SCRIPT_SELECTED_FILE_PATHS # 選択中ファイルのフルパス(改行区切り) NAUTILUS_SCRIPT_SELECTED_URIS # 上記を URI に変換したもの NAUTILUS_SCRIPT_CURRENT_URI # 現在表示しているディレクトリの URI NAUTILUS_SCRIPT_WINDOW_GEOMETRY # [横幅]x[高さ]+[左からの座標]+[上からの座標] # bash からは書くまでもなく $ を付けて利用 $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS # Python は os モジュールで import os s = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'] // Gjs は GLib で const GLib = imports.gi.GLib; let s = GLib.getenv('NAUTILUS_SCRIPT_SELECTED_FILE_PATHS');スクリプト実行時のカレントディレクトリは実行した時に開いているディレクトリになります。
実行可能パーミッションを与えた時点でコンテキストメニューに即時で追加されます。
右クリック、MacBook に入れているなら二本指タップで出るメニューです。
何も選択していないとこのメニューは出ません
一つ登録した後なら下画像のように「このフォルダーを開く」メニューも利用できるようになります。
ファイルを送る形なので普通にファイル名が起動パラメータとして取得もできます。
bash の場合 $@ で取得できます。
3.18 からはファイル名のアンダーバーをニーモニックとして使えるようになりました。
(Alt キーとアンダーバーの次のアルファベットキーで実行できる機能)
3.24 からは名前順に並ぶようになった。
スクリプトの例
以下は筆者が利用している例。拡張子は不要、シバンは必ず書いてください(UNIX のお約束)
お好みの言語を利用して作ってください。
*.html や実行パーミッションを付けた *.py を一発で gedit で開く
以下ならファイル名に半角空白があっても開くことが可能
#!/bin/sh #gedit "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" でもいい gedit "$@"
つまり Windows の「送る」みたいなランチャになる
よく使うものはどんどん登録してしまおう
#!/bin/sh ghex "$@"
zip 展開で cp932(Shift-JIS じゃない!)なファイル名の時
Fedora の unzip もパッチが当たっているので実は以下で文字化けさせず展開できる
#!/bin/sh for filename in "$@"; do unzip -Ocp932 "$filename" done
3.22 で改悪されたファイル圧縮機能がショボすぎる...
以下で以前と同じダイアログが出せる、file-roller に送っていただけだったのね
#!/bin/sh file-roller --add "$@"
圧縮形式を固定しディレクトリ名で一発作成
#!/bin/sh path=`pwd` name=${path##*/} # 拡張子を変更すればソレに応じた圧縮をしてくれます file-roller --add-to="${name}.tar.gz" "$@"
実行パーミッションを一発で切り替える
#!/bin/sh for name in "$@"; do [ -x $name ] && chmod -x $name || chmod +x $name done
デジカメや iPhone から画像を転送すると拡張子が大文字(*.JPEG)になっている
それらをまとめて小文字(*.jpg)に変更
#!/bin/sh for name in "$@"; do mv $name ${name%.*}.jpg done
ディレクトリ内の無作為なファイル名画像が膨大な数に!
ということがよくあるのは筆者だけ?
とりあえずゼロ詰めな連番にしてしまおう、という場合用
#!/bin/sh # 選択ファイルのみリネームするが既存ファイルは残すように num=1 for name in "$@"; do while : ; do newname=`printf %03d.jpg $num` if ! [ -e $newname ] ; then mv $name $newname break fi ((num++)) done done
大きな画像へのリンク用の小さな画像作り(jpeg, png 限定)
生成する画像の名前は Wordpress が付ける名前っぽいサイズを付加する例
fstring を使っていますので Python 3.6 以降で
#!/usr/bin/env python3 import os, re, gi gi.require_version('GdkPixbuf', '2.0') from gi.repository import GdkPixbuf # 300*300 以下で最大の大きさにする MAX_WIDTH = 300 MAX_HEIGHT = 300 path_array = os.environ['NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'].split('\n') for filepath in path_array: try: pixbuf = GdkPixbuf.Pixbuf.new_from_file(filepath) except: continue # GdkPixbuf のサイズ取得 p_width = pixbuf.get_width() p_height = pixbuf.get_height() # 小さい方に合わせる計算 if (MAX_WIDTH * p_height) > (MAX_HEIGHT * p_width): width = p_width * MAX_HEIGHT // p_height height = MAX_HEIGHT else: width = MAX_WIDTH height = p_height * MAX_WIDTH // p_width # リサイズされた Pixbuf 作成 smallpix = GdkPixbuf.Pixbuf.scale_simple(pixbuf, width, height, GdkPixbuf.InterpType.BILINEAR) # jpeg or png name, ext = os.path.splitext(filepath) if re.search(r'\.(jpg|jpeg)$', filepath, re.I): smallpix.savev(f'{name}-{width}x{height}{ext}', 'jpeg', ['quality'], ['85']) elif re.search(r'\.png$', filepath, re.I): smallpix.savev(f'{name}-{width}x{height}{ext}', 'png', ['compression'], ['9'])
ffmpeg を使って H.264 + aac (or mp3) の FLV や MOV 動画を MP4 コンテナに変更
Finder や Explorer でもサムネイル可能になるメリットがある
#!/bin/sh for name in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS; do ffmpeg -i $name -vcodec copy -acodec copy ${name%.*}.mp4 done
ffmpeg を使って動画ファイルを結合
ファイル名で勝手にソートされるのでその順番で結合されます
#!/bin/sh txt=connect_list.txt name=${1%.*} ext=${1##*.} for s in $@; do echo file $s done > $txt ffmpeg -f concat -i $txt -c copy out_$name.$ext rm $txt
動画の回転 (90°)
#!/bin/sh for fname in $@; do ffmpeg -i $fname -vf transpose=1 -metadata:s:v:0 rotate=0 r90_$fname done
動画の回転 (180°)
#!/bin/sh for fname in $@; do ffmpeg -i $fname -vf hflip,vflip -metadata:s:v:0 rotate=0 r180_$fname done
動画の回転 (270°)
#!/bin/sh for fname in $@; do ffmpeg -i $fname -vf transpose=2 -metadata:s:v:0 rotate=0 r270_$fname done
[管理者権限でファイルを開く] は Fedora27 からできなくなったので削除しました
gnome-terminal で開く機能は Nautilus に統合されたので削除しました
Copyright(C) sasakima-nao All rights reserved 2002 --- 2024.