上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

半角スペースを含むファイルやディレクトリ名からスペースを除くスクリプト

Ubuntu9.04用のGTKツール(GUI版)です。他のバージョンでも正常に動作するかもしれません。

あるディレクトリを指定すると、その中のサブディレクトリおよびその中に含まれる全てのファイルやディレクトリについて、名前に半角スペースが含まれている場合(これをAとします)に、半角スペースを削除することを試みます。もしも半角スペースを削除した場合と同じ名前のファイルかディレクトリがある場合(これをBとします)には、そのようなものが見つかる度に
1)Bの名前を変えて、Aの名前をBにする。
2)Aの名前を変えない。
3)Aを違う名前にする。
4)Bを削除し、Aの名前をBにする。
のうちのどれにするかを確認するダイアログを表示し、選択項目にしたがって作業します。

次のファイルをダウンロード(右クリックして保存)してファイル名をgtk_delSpaceInFileNameDuplicated2.shに変えてください。
gtk_delSpaceInFileNameDuplicated2.txt

次のファイルをダウンロード(右クリックして保存)してファイル名をgtk_delSpaceInFileName.shに変えてください。
gtk_delSpaceInFileName.txt

以上2つのファイルは同じディレクトリに置いてください。

そして、Ubuntuなどの端末でダウンロードしたファイルの存在するディレクトリに移動して、
$ bash ./gtk_delSpaceInFileName.sh
で実行してください。
もしくはgtk_delSpaceInFileName.shを右クリックして「プロパティ」ー「アクセス権」で
「プログラムとして実行できる」にチェックすれば、
ダブルクリックで「実行する」をクリックすることでも使えるようになります。

gtk_delSpaceInFileName.txt
の内容は以下のとおりです。


#!/bin/bash
if [ $(echo "$0"|cut -c1) != "/" ]
then
# zenity --warning --title="半角スペース除去スクリプト" --text="このスクリプトは必ず、root(/)ディレクトリからのフルパスで実行してください。\n例)$ bash /home/kiyoshi/gtk_delSpaceInFileName.sh"
# exit 0
script1="$PWD"/$0
script2="$PWD"/"$(echo "$0"|sed -e "s/[^\/]*$//")""gtk_delSpaceInFileNameDuplicated2.sh"
else
script1="$0"
script2="$(echo "$0"|sed -e "s/[^\/]*$//")""gtk_delSpaceInFileNameDuplicated2.sh"
fi
if [ -z "$1" ]
then
zenity --info --title="半角スペース除去スクリプト" --text="次のウィンドウでは、含まれるファイルやディレクトリ(サブディレクトリおよびその中のファイルも含む)\nの名前の中に含まれる半角スペースを除去したいディレクトリを指定してください。"
dir=$(zenity --title="半角スペース除去スクリプト" --file-selection --directory)
if [ $? = 1 ]
then
zenity --title="半角スペース除去スクリプト" --text="キャンセルが押されたので終了します。"
exit 0
fi
if [ -z "$dir" ]
then
zenity --title="半角スペース除去スクリプト" --text="ディレクトリが選択されなかったので終了します。"
exit 0
fi
zenity --question --title="半角スペース除去スクリプト" --text="${dir}の中のファイルやディレクトリの名前の半角スペースを除去します。よろしいですか?"
if [ $? = 1 ]
then
zenity --title="半角スペース除去スクリプト" --text="キャンセルが押されたので終了します。"
exit 0
fi
else
dir="$1"
echo $1
fi
if [ ! -w "$dir" ]
then
zenity --warning --title="半角スペース除去スクリプト" --text="${dir}ディレクトリに書き込めませんので、この中のファイルの名前は変更できません。" &
exit 0
fi
cd "$dir"
for a in *
do
if [ -d "$a" ]
then
if [ -x "$a" ]
then
bash "${script1}" "${dir}/$a"
else
zenity --warning --title="半角スペース除去スクリプト" --text="${dir}$aディレクトリ内を閲覧できませんので、この中のファイルの名前は変更できません。" &
fi
fi
goalname="$(echo "$a"|tr -d " ")"
if [ "${goalname}" != "$a" ]
then
if [ -e "${goalname}" ]
then
bash "${script2}" "${dir}/$a"
else
mv "$a" "${goalname}"
fi
fi
done



gtk_delSpaceInFileNameDuplicated2.txt
の内容は以下のとおりです。


#!/bin/bash
# This shell script should be used for a file or directory whose name contains space ' ' and the name generated by eliminating space from the file name is used by another preexisting file or directory.
title="ファイルおよびディレクトリ名の半角スペース除去スクリプト;半角スペースを除いた名前のファイルなどが既に存在しています"
if [ -z "$1" ]
then
zenity --warning --title="${title}" --text="このスクリプトを実行する際には、\n必ず、上記のようなファイルをオプションとして付け加えてください。\nオプションとして何も付け加えられていないので、終了します。"
exit 0
fi
if [ ! -e "$1" ]
then
zenity --warning --title="${title}" --text="$1が存在しません。終了します。"
exit 0
fi
if [ "$(echo $1|grep "/")" ]
then
dir="$(echo $1|sed -e "s/[^/]*$//")"
name="$(echo $1|tr "/" '\n'|tail -n 1)"
else
dir="$PWD"/
name="$1"
fi
goalname="$(echo ${name}|tr -d " ")"
if [ ! -e "$dir${goalname}" ]
then
zenity --warning --title="${title}" --text="${goalname}が存在しません。終了します。"
exit 0
fi
if [ "${goalname}" = "$1" ]
then
zenity --warning --title="${title}" --text="$1には半角スペースが含まれません。終了します。"
exit 0
fi
# ここまでで、このスクリプトの第一オプションに半角スペースが含まれ、そのような名前のファイルまたはディレクトリが存在し、第一オプションから半角スペースを除去した名前のファイルが存在するという条件を満たさない場合にはこのスクリプトは終了している。
select=$(zenity --list --height=300 --width=800 --radiolist --title="${title}" --text="$dirのファイル「${name}」の名前には半角スペースが含まれますが、\n「${goalname}」という名前のファイルも存在しています。\nどうしますか。以下から選んでチェックしてください。" --column="↓にチェック" --column="No." --column="行う内容" TRUE "1" "ファイル「${goalname}」の名前を変えて、ファイル「$name」の名前を「${goalname}」にする。" FALSE "2" "「$name」の名前を変えない。" FALSE "3" "ファイル「$name」を違う名前にする。" FALSE "4" "既に存在する「${goalname}」を削除する。")
if [ $? = 1 ]
then
zenity --warning --title="${title}" --text="キャンセルが押されました。「$name」については変更せずに終了します。"
exit 0
fi
if [ "$select" = "1" -o "$select" = "3" ]
then
nautilus "$dir" &
sleep 2
name1=$(zenity --title="${title}" --entry --text="$dirのファイルは今開いたウィンドウのとおりです。存在しない名前を入力してください。")
if [ $? = 1 ]
then
zenity --warning --title="${title}" --text="キャンセルが押されました。「$name」については変更せずに終了します。"
exit 0
fi
until [ -n "$name1" -a ! -e "$dir$name1" ]
do
name1=$(zenity --title="${title}" --entry --text="$dirのファイルは今開いたウィンドウのとおりです。存在しない名前を入力してください。")
if [ $? = 1 ]
then
zenity --warning --title="${title}" --text="キャンセルが押されました。「$name」については変更せずに終了します。"
exit 0
fi
done
if [ "$select" = "1" ]
then
mv "$dir${goalname}" "$dir${name1}"
mv "$dir$name" "$dir${goalname}"
else
mv "$dir$name" "$dir$name1"
fi
exit 0
elif [ "$select" = "2" ]
then
exit 0
elif [ "$select" = "4" ]
then
rm "$dir$goalname"
mv "$dir$name" "$dir$goalname"
exit 0
else
exit 0
fi
exit 0

関連記事

テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

プロフィール

kiyoshi

Author:kiyoshi
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
since 2011/9/25
現在の閲覧者数:
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。