AutomatorのPythonでファイル一括操作した
環境
メイン環境
MacOS X Sierra 10.12.6 (16G2016)
サブ環境
MaxOS X Mojave
やりたかったこと
一括でディレクトリ内の画像ファイルを同じ名前のディレクトリに入れたい
つまり、これを
images ├a.png └b.png
こう
images ├a │└a.png └b └b.png
最初にやってだめだったこと
シェルスクリプトを組んでターミナルから叩いてもらう
images ├a.png ├b.png └mkdir_and_mv_images.sh
mkdir_and_mv_images.sh
#!/bin/sh for filename in *.png; do echo $filename fname=`echo $filename | sed "s/\.[^\.]*$//"` echo "$fname" mkdir "$fname" mv "$filename" "$fname" done
$ cd /path/to/images/directory $ chmod +x mkdir_and_mv_images.sh $ ./mkdir_and_mv_images.sh
なぜだめだったか
- 動くけど繰り返したいときに手間かかる
- 使用者がデザイナーで黒い画面きらい
更に試してだめだったこと
Automatorでサービスを作り、その中でシェルスクリプト動かす。
サービスファイルをインストールしたらimagesディレクトリを右クリックしてメニューから選ぶだけ。
右クリックしたディレクトリまでのパスが$1に入る。
#!/bin/sh cd $1 for filename in *.png; do echo $filename fname=`echo $filename | sed "s/\.[^\.]*$//"` echo "$fname" mkdir "$fname" mv "$filename" "$fname" done
なぜだめだったか
Sierraだと動くけどMojaveだとmkdirコマンドでPermission deniedになる。
回避できず、謎すぎてはげる
解決策
前置きが長い。
Automatorのサービスの中でPythonスクリプトを動かして解決した。
# coding: utf-8 import os import sys import glob import shutil dir = sys.argv[1] os.chdir(os.path.expanduser(dir)) print(os.getcwd()) files = glob.glob('./*.png') for f in files: name, ext = os.path.splitext(f) os.mkdir(name) shutil.move(f, name)
てか標準出力表示したいんだけど
出し方がよくわかんない、なんかうまくメッセージダイアログに出せないし、
raise Exception('error')
とかしてもでない。謎。
せめてここの結果に出したいけどそのまま実行ボタン押してもsys.argvの中身無いからエラーで止まる
「パス」という項目があったので試しに置く
この「~/Desktop」の値が全くいじれねんけど!!!!!!!!!!!!
ここ押さなきゃ編集できないとか罠でしょ…
できた。