多量のフォルダー作成

こんにちは、Enokanaです。
 多量のフォルダーを作りたいのですが、フォルダーの名前をいちいちFinder上で付けるは大変なので、
エディターなどのテキストファイルに改行などで区切ったリストを作りこれを読み込んで一気に出来たら
と思ったのですが、なかなかいいツールが見つかりません。Windowsなどにはあるようですが、Macにはこういう
ツールは無いのでしょうか。
 Terminalでシェルスクリプトで試してみましたが、日本語名はスクリプトとして認識しないようでエラーがでます。

投稿日 2004/10/25 18:55

返信: 19

2004/10/25 22:07 Community User への返信

ぽん太さん、リプライありがとうございます。
 R-Nameをダウンロードして試用してみましたが、リネームツールのようですね。
 私の希望はゼロから多量のフォルダーを作成したいのです。多量の名前には関連が
無く、連番でもありません。また、英語、日本語どちらの名前もあります。
Windowsでは、http://www.vector.co.jp/soft/win95/util/se233529.html
のようなソフトがあるのですが・・・・情報ありがとうございます。
 ターミナルで出来そうな気がするのですが、直接mkdirだと日本語フォルダーも
作れるのですが、シェルスクリプトにするとエラーになってしまいます。
後はApple スクリプトがありますが、いまいちわからなくて・・・・
 引き続きツール、ソフト等情報をもとめます。

2004/10/25 23:52 Community User への返信

「テキストエディットで一番上にあるウインドウのテキストの各行」を名前とするフォルダを「Finderで一番上にあるウインドウ」に作るアップルスクリプトです(長いっ)。
スクリプトエディタにコピー&ペーストして実行してください。
※フォルダ名が重複するとエラーになります。
※フォルダ名が半角のコロン(:)を含んでいてもエラーになります。
※フォルダ名が長過ぎてもエラーになります。
※フォルダ名に半角のスラッシュ(/)を使う事はできますが、OS Xでは推奨されていません。

tell application "TextEdit"
set myText to text of document 1
end tell
tell application "Finder"
activate
display dialog "「" & (paragraph 1 of myText) & "」他、計 " & (number of paragraphs of myText as text) & " 個のフォルダを「" & name of Finder window 1 & "」に作成します。よろしいですか?"
repeat with myParagraph in paragraphs of myText
try
if number of characters of myParagraph is not 0 then make new folder at Finder window 1 with properties {name:myParagraph}
on error errorMessage
display dialog "フォルダ「" & myParagraph & "」は何らかの理由で作成できませんでした。"
end try
end repeat
end tell

2004/10/26 06:36 Community User への返信

リストをUTF-8で保存して(仮にfolderlist.txt)
cat folderlist.txt | awk '{system("mkdir "$1)}'
とか。リストの最後に空行があればmkdirでエラーが出るけど気にしない。
awkの部分をもっと素直に書けるのかも知れないけど解らないので。

2004/10/26 08:15 Community User への返信

以下に書く私のスクリプトより、たてばさんのスクリプトの方が融通がききそう(RTFなどでも処理できる点が良いですね)ですが、既存のテキストファイル(拡張子はtxt)を選択して処理する場合のスクリプトを作ってみたので、下にペーストしておきます。
--ここから
set res to choose file with prompt "フォルダリスト(改行区切り)を記述したテキストファイルを選択してください" as Unicode text without invisibles
tell application "Finder" to if name extension of res is not in {"txt" as Unicode text} then return
open for access res
if (get eof res) > 0 then
set nameList to paragraphs of (read res as text)
close access res
else
close access res
return
end if
set res to choose folder with prompt "フォルダの作成先を選択してください" as Unicode text
repeat with i in nameList
try
tell application "Finder" to if not (folder i of res exists) then make new folder at res with properties {name:i}
on error msg
activate
display dialog msg giving up after 10 with icon 2
end try
end repeat
--ここまで
--まれにスクリプトエディタ上だとうまく動かない事(テキストファイルのeofなどの取得が更新されないなど)がありますが、その場合はアプリケーションで書き出して使用してください
--いちいちダイアログを出したく無い場合は、読み込み&保存先を定数にするか、ドロップレットに変更しても良いかも知れません
--エラーメッセージを日本語にしたい場合は、アプリケーションバンドルで書き出して、言語に日本語を追加(フォルダ「Japanese.lproj」を追加)してください
--日本語OSのopen for accessのテキストエンコードはたしかShiftJISだったと思います(失念&未確認)
----以上、AppleScript
フォルダ作成部分をシェルコマンドで
 do shell script "mkdir " & quoted form of xxx--xxxはパス
…としても良かったのですが、Finderに作らせた方が無難だろう…と言う事で、そのようにしております。

2004/10/26 13:06 Community User への返信

もださん、リプライありがとうございます。
 リストの文字列を一行ずつ読み出して変数にすればいいとはわかっていたのですが、awkを使う方法が
あったのですね。一行ずつ読み出す方法がわからなくて、挫折してました。
 早速ご教授のコマンドを試してみました。日本語の処理もうまくいきましたが、半角スペースの入っている
ファイル名ではエラーがでました。結局はmkdirで処理させるので半角スペースが入っているとだめみたいです。
一応、リストで半角スペースをバックスラッシュでエスケープしてみましたがだめでした。
うーーんやはりTerminalで日本語を自由に使うのは無理があるのか・・・もう少し研究してみます。
 たてばさん、リプライありがとうございます。
 Appleスクリプトを試してみました。ばっちり出来ました。感動的です・・・。
>フォルダ名が重複するとエラーになります。
 これはかえって便利です。同じフォルダーが有ったときわかりますから。
>フォルダ名が半角のコロン(:)を含んでいてもエラーになります。
>フォルダ名に半角のスラッシュ(/)を使う事はできますが、OS Xでは推奨されていません。
 これも問題有りません。たまにWindowsで作られたリストも有るのですが、この二つを含んでいるの
はあまり見かけません。
>フォルダ名が長過ぎてもエラーになります。
 これは今のことろエラーはでていません。OSXでは確か255文字(半角)までいけたはずですが、UTF-8の
2バイト文字は確か3バイトで一文字を表していたと思います(うろ覚え)ので80文字近くはいけるので問題は
無いと思います。実際72文字でもOKでした。
 大変便利なスクリプトをありがとうございました。大変勉強にもなりました。
ezQさんリプライありがとうございます。
 早速試してみましたが残念ながら当方の環境では動作を確認出来ませんでした。
スクリプトエディタ上、アプリケーション形式とも下記のエラーが表示されます。
Finderでエラーが起きました : 一部のデーターを目的のデーター型に変換できません。
 
 アプリケーション形式では英語表示ででますがたぶん同じ意味だと思います。(自信なし)
 ダイヤログでリストファイルや保存フォルダーを選ぶのは大変便利ですので、何とか動作させたいのですが、
リストファイルの文字コードがUnicodeやUTF-8ではスクリプトエディター上では文字化けしたので、
Shift-Jisにしてみましたが、結果は同じでした。思いつきで、
tell application "Finder" to if not (folder i of res exists) then make new folder at res with properties {name:i}
文のif〜thenを削除するとうまくいきましたが、なにか問題がでるのでしょうか。同名フォルダ存在の確認文だと思う
のですが、同名フォルダがあるとFinderがエラーを返しますので大丈夫だとおもうのですが・・・テストではうまくい
きました。ご意見をお待ちしております。

2004/10/26 13:36 Community User への返信

ezQです。
>Finderでエラーが起きました : 一部のデーターを目的のデーター型に変換できません。
このエラーはスクリプト内で意図的に作り出してるもので、Finderでの都合の悪い状況(文字や文字列の長さ)に対処する為に組み込んだものです。
実は私もここに書く前に「どんな文字が都合が悪いのか?」を試してみたんですが、: などのFinder的に都合の悪い文字が入力されると、確実にエラーが発生します。
(folder i of res exists)
この時点で既にエラーが発生する訳ですが、この動作は正常なのでOKボタンを押して次に進んでください。(または、10秒待ってると次に進みます)
if文を削除すると‥‥との事なので、(folder i of res exists)でエラーが発生しているのは間違いないのですが、では変数 i に格納された文字列の何が不都合なのかは、状況によりそれぞれですね。スラッシュやコロンは使用していないとの事なので、‥‥何だろう?他OSの改行文字??(実はOS間の改行文字は全く未検証です)
ただ、どの行でエラーが発生してるかが解り辛いので、私のスクリプトの後半のエラーメッセージ表示部分を、
on error msg
activate
display dialog i & return & return & msg giving up after 10 with icon 2
end try
‥に差し替えると、どの行で問題が発生しているかが解りやすくなります。
(もしかすると変数 i にどうしてもダメな文字が含まれている場合は、display dialogすら引っかかるかも知れませんが‥‥)
または、Enokanaさんの試されたように、if文を削除してもいいかも知れませんね。
発生するエラーは全部tryに任せてしまうのも手かも知れません。
(そのほうがユーザにとっては解りやすくて良いかも?)

2004/10/26 14:49 Community User への返信

>  早速ご教授のコマンドを試してみました。日本語の処理もうまくいきましたが、半角スペースの入っている
> ファイル名ではエラーがでました。結局はmkdirで処理させるので半角スペースが入っているとだめみたいです。
元記事をちゃんと読んでなくて、ここだけに反応しますが、
mkdir 'test test'
みたいにフォルダ名をシングルコーテーションで囲うようにしたら、うまく行きませんか?

2004/10/26 18:38 Community User への返信

ezQさん、たびたびありがとうございます。
 ちょっと説明不足だったのでお詫び申し上げますが、エラーはリストのほぼすべての行で起こります。
つまり10行リストが有れば10回ダイヤログがでます。
>if文を削除すると‥‥との事なので、(folder i of res exists)でエラーが発生しているのは間違いないのですが、では変数 i に格納された文字列の何が不都合なのかは、状況によりそれぞれですね。スラッシュやコロンは使用していないとの事なので、‥‥何だろう?他OSの改行文字??(実はOS間の改行文字は全く未検証です)
 リストの文字列が問題なんでしょうか、テスト用の文字列は投稿に使用しているMacのテキストエディットまたは、Jedit4.0で作成しています。改行の問題を指摘されましたので、文字コードと改行コードを色々組み合わせてやってみましたがだめでした。文字コードはUnicode、UTF8、Shift-Jis、EUCです。改行コードはCR、LFです。ちなみに1バイト文字、2バイト文字どちらもエラーがでます。
今のところ、「if文を削除すると‥‥」で問題なく動いていますのでしばらく様子をみてみます。
翡翠さん、リプレイありがとうございます。
>みたいにフォルダ名をシングルコーテーションで囲うようにしたら、うまく行きませんか?
 これはやってみたのですがだめでした。ダブルコーテーションでもだめでした。Terminalへの直接入力ではスペースはシングルコーテーションやバックスラッシュでエスケープ出来るのですが、スクリプトとしてリストにするとだめなようです。ちなみに全角スペースは問題有りませんでした。

2004/10/27 03:11 Community User への返信

>  これはやってみたのですがだめでした。ダブルコーテーションでもだめでした。
んー、では、
cat folderlist.txt | awk '{system("mkdir \""$0"\"")}'
こういうふーにやってもダメ?
\ は半角です。

2004/10/27 08:56 Community User への返信

う〜ん、悩ましい。。。
またテキストがらみのエラー‥‥(実は他のトピックでも同じような事がありました)
(folder i of res exists)
が問題なのは解っているのですが、書き方を変えて
(folder ((res as string)&i) exists)
のほうが良いかもしれません。
考えてみたら、私は日頃こっちのほうを常用していました。
それでもだめなら、
(folder ((res as string)&(i as unicode text)) exists)
(folder ((res as string)&(i as string)) exists)
を試してみるとか‥‥。
(AppleScriptとREALbasic5.5を常用していますが、最近はunicode関連の対処がめんどくさくって‥‥。)
‥‥でも、同名項目スキップなしでも良いのだったら、外しても構わないかなと思います。使いやすいように変えてください♪
私は仕事がら、めちゃ大量の項目(数百〜数千)を処理することをいつも考えるので、既知のエラーはできるだけスキップ(同名項目スキップなど)したい人なのです。。。
ps.
もしFinder上から項目を取得する仕様に変更した場合は、(Finder項目 as alias)as stringとしてください。‥でないと、パスに日本語が混ざっていた時に文字欠損の原因となります。

2004/10/27 13:16 Community User への返信

Enokanaです。
>翡翠さん
 ばっちり出来ました。今のところ問題はでていません。ありがとうございます。
 話は前後しますが、今回の「多量のフォルダー作成」は主にファイルを整理・検索したいためファイルの名称及び短い内容ならその内容をフォルダー名にしたいためでした。ファイルの整理・検索ツールは市販を含めシェァウェアなど色々有りますが基本的に使いにくく、OSのバーションやそのソフトのバーションを気にせずにはいられません。
 OS9の頃はファイル名の長さの制限やフォルダ数の制限(実質制限は無かったと思いますがパフォーマンスの点で)があり断念しましたが、OSXになってから密かにこの方法への転換をねらっていたのです。しかしこの「多量のフォルダー作成」の方法がなかなか見つからず今までのデーターを変換出来ませんでした。ということで今回の質問になったわけです。自分以外の複数のOSで作られるファイル名には英語、日本語、記号など外字なども含まれており、また文字コードの問題も存在するので頭が痛い状態です。
 ちなみに私はローカルネット上で作業をするときはTerminalを良く使いますので、翡翠さんのこの方法も大変便利な物として使わせて頂きます。ありがとうございました。
>ezQさん
 >(folder ((res as string)&i) exists)
 上記の方法でばっちりいけました。ありがとうございます。
 文字コードの問題は大変ですね。OSX上ではUnicode、UTF-8、Shift-Jisと3種類の文字コードが使われているそうで、日本語処理に関しては当分これと戦って行かなければならない感じてす。
 同名フォルダーの処理に関しては、私の方の処理も数百から千の処理数になるので、エラー処理が有った方がいいのかどうかしばらく使い込んでから決めたいと思います。便利なツールありがとうございました。

2004/10/27 14:48 Community User への返信

>  ちなみに私はローカルネット上で作業をするときはTerminalを良く使いますので、翡翠さんのこの方法も大変便利な物として使わせて頂きます。ありがとうございました。
もださんのに小手先で追加しただけなので、その感謝の気持ちは、もださんへお願いします。
Enokana 感謝 | 翡翠 | もだ
パイプしときますね^^

2004/10/27 15:56 Community User への返信

>OSX上ではUnicode、UTF-8、Shift-Jisと3種類の文字コードが使われているそうで、
ファイル名に関しては、マウントしてFinder上で普通に見れているのならUTF-8だけ考えていれば良いみたいです。HFS(ファイル名はSJIS)なDiskImageをマウントして、そのままではFinder上でもTerminalでも文字化けしていますが、「情報を見る」でエンコーディングを指定すればTerminalでもファイル名が文字化けする事無く普通に見れます。(Terminalのエンコーディング設定はUTF-8のまま)
たぶん他のファイルシステムをマウントした時も、Finder上でちゃんと見れてるならTerminalやその他でも問題ないのではないかと思います。VFS(仮想ファイルシステム)上で吸収してくれるのでしょう。確認出来ないので想像でしかないですが。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

多量のフォルダー作成

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。