Automaterフォルダアクション 条件で選択してフォルダ移動させたい

みなさま こんにちは

以下ご教示いただきたく質問させていただきます。


【質問】

とあるフォルダ内(サーバー)にある無数のフォルダから以下の条件で選択して移動させたいです。

選択条件は以下になります。

・とあるフォルダの"第一階層"にある"フォルダのみ”を選択したい

・フォルダの変更日が現在から2ヶ月前のもの(最悪の場合作成日でも構いませんが、

 できれば変更日の方が望ましいです)


当方プログラムの知識が全くなく、Automaterなるものを使えば出来るのではないかと思い

チャレンジしているのですが、思うように動かせずにいます。

選択さえできれば、アクションでターゲットの場所に動かせることは確認できています。


「肝心なところはスクリプト書かなければダメ」とも耳にしました。

スクプリプトが必要であれば添えていただけると大変助かります。


以上何卒宜しくお願いいたします。

* タイトルを変更しました。 Apple Inc.

Mac mini 2018 or later

投稿日 2021/10/19 22:16

返信
返信: 9

2021/10/20 21:59 えぴいそら への返信

Automator のフォルダアクションは、フォルダアクション対象フォルダにファイルやフォルダが追加された際にワークフローが実行される仕組みです。


今回の場合、フォルダアクション対象フォルダに2ヶ月前に変更されたフォルダが追加されたら移動する、、、というワークフローになりますが、それで良いのでしょうか?


監視対象のフォルダ直下にあるフォルダの変更日が2ヶ月前だったら移動する、、、ということなら、カレンダーアラームの方が適切だと思うのですが。どうでしょうか?


2021/10/21 04:49 えぴいそら への返信

残る課題としまして、、、変更日で設定するとどうしても対象物が選択されません。


ざっと試した限りですが、当方 (Mojave 10.14.6) では問題なさそうです。「Finder項目にフィルタを適用」アクションが期待通りに動かないのでしょうかね。代わりに「シェルスクリプトを実行」を使うとこんな感じ。



コード

require 'date'

now = Date.today
ARGV.each do |f|
    next unless File.directory?(f)
    mdate = File::Stat.new(f).mtime.to_date
    puts f if now << 2 >= mdate
end


なお、上記スクリプトでは「2ヶ月以上前」のフォルダを取得するようにしてます。「2ヶ月前」にしたい場合はコードを次のように変更してください。


変更前

puts f if now << 2 >= mdate


変更後

puts f if now << 2 == mdate


2021/10/22 00:32 えぴいそら への返信

動きましたか。良かったですね。以下は修正版です。動作には関係ありませんが変なところを直しました (汗)。


コード (変更後)

require 'date'

today = Date.today
ARGV.each do |f|
    next unless File.directory?(f)
    mdate = File::Stat.new(f).mtime.to_date
    puts f if today << 2 == mdate
end


あと、今後のことをちょっと。


今回使った Ruby は、少なくとも Big Sur までは標準搭載されてますが、将来的には OS に搭載されなくなるとのことです。なので、将来的にはこのワークフローは動かなくなります。その際はこのボードとかで再度質問すると良いと思います。


ご参考

macOS Catalina 10.15 Release Notes > Scripting Language Runtimes

https://developer.apple.com/documentation/macos-release-notes/macos-catalina-10_15-release-notes


2021/10/20 22:35 Hiro__S への返信

Hiro.Sさま

お忙しいところ、返信誠にありがとうございます。


>>フォルダアクション対象フォルダに2ヶ月前に変更されたフォルダが追加されたら移動する、、、というワークフローになりますが、

>>それで良いのでしょうか?

そう言うことになりますが、正しく表現しますと追加されたらと言うよりは2ヶ月経過したら移動する、になります。同じことでしょうか?



カレンダーアラームとはAutomaterにあるアクションのことでしょうか?

少し触ってみましたがよく分かりませんでした。

申し訳ございません。もう少し詳しく教えていただけますと幸いです。


以上よろしくお願いいたします。

2021/10/21 00:17 えぴいそら への返信

正しく表現しますと追加されたらと言うよりは2ヶ月経過したら移動する、になります。同じことでしょうか?


別のことです。(下図参照)



ーーーーー


カレンダーアラームとはAutomaterにあるアクションのことでしょうか?


↓カレンダーアラームはこれ。



カレンダーアラームでは指定した日時にワークフローを実行できます。(例: 午前0時に変更日が2ヶ月前のフォルダを任意の場所に移動する)


本件についてはカレンダーアラームの方が良いと思います。



図2

2021/10/21 02:21 Hiro__S への返信

Hiro.Sさま


ありがとうございます!

お忙しいところ大変助かります。


だいぶ前進しました!

・「直下のフォルダのみを選択したい」はアクションの"フォルダの内容を取得"でサブフォルダをチェックしなければ良かったのですね。

 フォルダの中身まで監視対象になっていたことがこれで解決しました。

・残る課題としまして、、、変更日で設定するとどうしても対象物が選択されません。

 仕方がないので作成日で設定すると動いてくれます。

 しかしそうすると、つい最近変更を加えたフォルダで、実はまだ移動対象ではないのにフォルダの作成日自体がだいぶ前であるために

 移動対象になってしまうという現象につながってしまい…。

 ここもずっと悩んでいるところなのですが、半ば諦めようかと考えています…。


あとはこれが解消されればかなり理想に近付けそうです。

もしお分かりでしたらご教示いただけると嬉しいです。



以上よろしくお願いいたします。

2021/10/21 06:52 Hiro__S への返信

Hiro.Sさま


度重なる質問への返信まことにありがとうございます。

説明も都度図入りで且つ丁寧、無知な私でもとても分かりやすくて対応しやすいです。

やはりプロフェッシャルな方は違いますねぇ。感動してしまいます。

返信見るたびにまず「うわぁ〜スゴい」ってなっています。


当方OSはHigh Sieraです。同じ職場にMojaveもございますのでそちらでの動作も試してみたいと思います。

スクリプトまでご教示くださり誠に感謝しかございません。

「2ヶ月前」でご名答でございます。



いずれも明日出勤しましたらチャレンジしてみます!


本日はありがとうございました。

またよろしくお願いいたします。

2021/10/21 23:21 えぴいそら への返信

Hiro.Sさま


返信が遅くなってしまいました。

先ほど、昨夜教えていただいたスクリプトにて実行してみました。

すると…、まさしくこれです!変更日で!これがやりたかったことです!

いや〜スゴいですね。。。

しかもアクション(作成日ではありますが)で動かすよりもスクリプトだと一瞬なんですね。


一人で悶々とトライ&エラーを繰り返し(無駄な)時間を費やしていたのですが、

質問して良かったです。1日でクリア出来ました。


スクリプトは難しすぎて私には敷居が高すぎますが、

こんな私でもAutomaterはほんの少しだけ理解が深まりました。

また何かでトライしてみたいと思います。


この度は本当に親切丁寧に応えてくださりとても助かりました。

感謝いたします。


また何かありましたら是非よろしくお願いいたします。

ありがとうございました!!

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

Automaterフォルダアクション 条件で選択してフォルダ移動させたい

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