GUIファイルマネージャから選択したファイルを分割する
「GUIファイルマネージャから選択した複数のファイルを結合する」の逆で、Thunar(Xfce4)やNautilus(GNOME・Nautilus-actions使用)で、選択したファイルを複数に分割するスクリプトとそのアクション設定を扱う。
今回作成したスクリプトでは、分割後のファイル名は元のファイル名に「.000」「.001」のような連番拡張子を付けて出力するようになっていて、桁の数は3桁固定(最大分割数は1,000)とした。
スクリプト
Zenityを使用している。
[任意]ファイル名: action-split.sh
#! /bin/bash # 名前: 分割(_S)... # 説明: 選択したファイルを複数に分割します # 依存: Zenity # icon: 任意 # 対象: ファイルのみ/単 ファイル名: * # 種類: # Nautilus-actions: */* # Thunar: フォルダ以外全て # 引数: 全てのファイル/ディレクトリのパス # Nautilus-actions: %M # Thunar: %f # 概要: 指定したファイルを分割して、ダイアログで指定したディレクトリに出力 # 分割数の上限は1000(3桁固定) # NautilusやThunarではファイルの場所は絶対パスで引数に渡されるので # 絶対パス変換は必要ないが、端末から実行した場合のために入れている INFILE=${1} INFILE_BASENAME=$(basename "${INFILE}") INFILE_ABSPATH=$(cd "$(dirname "${INFILE}")" && pwd)/${INFILE_BASENAME} INFILE_DIRNAME=$(dirname "${INFILE_ABSPATH}") # ファイルかどうかをチェック if [[ ! -f "${INFILE}" ]]; then zenity --error --title "ファイルではありません" --text "\"${INFILE}\"はファイルではありません" exit 1 fi # 出力ディレクトリの場所を指定 OUTDIR=$(zenity --file-selection --directory --title="出力ディレクトリの指定" --filename "$(dirname "${INFILE_DIRNAME}")/") [[ ${?} -ne 0 ]] && exit 1 # キャンセルされたら何もしないで終了 # 分割サイズの指定 # 正しい書式で入力されなければ入力ダイアログに戻る for ((;;)); do SPLITTED_SIZE=$(zenity --entry --title "分割サイズの指定" --text "分割サイズを入力してください 例: 100m(100MiB)/5000k(5000KiB)/512(512B)") [[ ${?} -ne 0 ]] && exit 1 # キャンセルされたら終了 # 書式が正しければループを抜ける if echo ${SPLITTED_SIZE} | egrep "^[0-9]+[km]?$" >/dev/null 2>&1; then break else zenity --error --title "書式が不正" --text "分割サイズの書式が不正なため もう一度入力し直す必要があります" fi done # splitコマンドでファイルを分割し、指定ディレクトリに出力する cd "${OUTDIR}" split --verbose -b ${SPLITTED_SIZE} -a 3 -d "${INFILE_ABSPATH}" "${INFILE_BASENAME}." 2>&1 | zenity --text-info --title "分割処理の結果出力(${OUTDIR})" --width=500 --height=300
Thunarで使用する場合の設定
「登場する条件」タブ
- 以下を選択した場合に登場: フォルダ以外全て
Nautilus-actionsで使用する場合の設定
既定の設定の部分は省略し、変更するところだけを書いている。
「メニュー・アイテムとアクション」タブ
関連記事:
- ファイルマネージャThunarのコンテキストメニューのアクションを作る
- 「CLIとGUIの架け橋」zenity
- Nautilusでファイルの種類や名前によって色々なアクションを実行
- Nautilus-actionsの設定例
- ファイルの分割(split)と結合(cat)
- GUIファイルマネージャから選択した複数のファイルを結合する
使用したバージョン: