sudo hostnamectl set-hostname <新hostname>としたらその場は変わるのですが、リスタートするとまた元に戻ってしまいます。固定するにはどうしたらいいでしょう。Raspberry pi zero2wでUbuntu Serverを使っています。

sudo hostnamectl set-hostname としたらその場は変わるのですが、リスタートするとまた元に戻ってしまいます。固定するにはどうしたらいいでしょう。Raspberry pi zero2wでUbuntu Serverを使っています。

Raspberry Pi 上の Ubuntu Server でホスト名が元に戻ってしまう原因は、初期設定ツールである cloud-init が起動時に設定を上書きしているためです。 

固定するには、以下のいずれかの方法で cloud-init の設定を変更してください。

方法1:cloud-init のホスト名管理を無効にする(推奨)

これが最も確実な方法です。cloud-init によるホスト名の自動設定をオフにすることで、hostnamectl での設定が維持されるようになります。 

  1. 設定ファイルを開きます。bashsudo nano /etc/cloud/cloud.cfg
  2. preserve_hostname: false という行を探し、true に書き換えます。yamlpreserve_hostname: true
  3. 保存して終了(Ctrl+O, Enter, Ctrl+X)し、再度ホスト名を設定して再起動します。bashsudo hostnamectl set-hostname <新しいホスト名> sudo reboot

方法2:user-data ファイルを直接編集する 

Raspberry Pi 版 Ubuntu の場合、/boot/firmware/user-data(または /boot/user-data)に記述されているホスト名が優先されることがあります。 

  1. 設定ファイルを開きます。bashsudo nano /boot/firmware/user-data
  2. hostname: ubuntu のようになっている箇所を、希望のホスト名に書き換えて保存します。
  3. 再起動すると反映されます。 

注意点

ホスト名を変更した後は、/etc/hosts ファイル内にある旧ホスト名も新しいものに書き換えておかないと、sudo コマンド実行時に「名前解決ができない」といった警告が出ることがあります。 

bash

sudo nano /etc/hosts
# 127.0.1.1 の横にある旧ホスト名を新しいものに変更

これらを行っても解決しない場合、特定のネットワーク環境(DHCPサーバー側での強制指定など)の可能性はありますか?

ubuntu serverでディスプレイ出力を90°回転させる方法を教えてください。

ubuntu serverでディスプレイ出力を90°回転させる方法を教えてください。

Ubuntu Serverでディスプレイ出力を90度回転させる方法は、GUI(デスクトップ環境)の有無によって異なります。

1. GUIがない場合(コンソール画面のみ)

Ubuntu Serverの標準的なCUI画面(仮想コンソール)を回転させるには、フレームバッファ(fbcon)の設定を変更します。

  • 即時反映させるコマンド:
    以下のコマンドを実行すると、現在の画面が即座に回転します。bash# 90度右回転 (時計回り) echo 1 | sudo tee /sys/class/graphics/fbcon/rotate_all # 90度左回転 (反時計回り) echo 3 | sudo tee /sys/class/graphics/fbcon/rotate_all # 0:標準, 1:90度, 2:180度, 3:270度
  • 永続的に設定する方法(再起動後も有効):
    GRUBの設定ファイルを編集して、起動オプションに回転設定を追加します。
    1. 設定ファイルを開く: sudo nano /etc/default/grub
    2. GRUB_CMDLINE_LINUX_DEFAULT 行に fbcon=rotate:1 を追記する(90度回転の場合)。
      例: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash fbcon=rotate:1"
    3. 設定を更新する: sudo update-grub
    4. システムを再起動する。 

2. GUIがある場合(Ubuntu Desktopを導入済み)

デスクトップ環境(GNOMEなど)を使用している場合は、xrandr コマンドまたは設定メニューを使用します。 

  • コマンドで回転:bash# 90度右回転 xrandr -o right # 90度左回転 xrandr -o left # 元に戻す xrandr -o normal コードは注意してご使用ください。※ Wayland環境では gnome-monitor-config などのツールが必要になる場合があります。
  • 設定メニューから変更:
    [設定] > [ディスプレイ] > [向き (Orientation)] から「Portrait Right(右縦)」または「Portrait Left(左縦)」を選択して適用します。 

現在、どちらの環境(コンソール画面デスクトップ画面か)で作業されていますか?

GUIは未インストールでConsoleで作業しています。

GUIがインストールされていないUbuntu Server(コンソール画面)では、フレームバッファ(fbcon)の機能を設定することで画面を回転させることができます。 

1. コマンドで即時に回転させる(一時的)

現在ログインしているコンソール、またはすべての仮想コンソールを即座に回転させるには、以下のコマンドを実行します。

  • すべてのコンソールを90度回転(時計回り):bashecho 1 | sudo tee /sys/class/graphics/fbcon/rotate_all
  • 各数値の意味:
    • 0: 標準(回転なし)
    • 1: 90度回転(時計回り)
    • 2: 180度回転(上下反転)
    • 3: 270度回転(反時計回り) 

2. 再起動後も設定を維持する(永続的)

再起動しても回転した状態を維持するには、ブートローダー(GRUB)の設定を変更して、カーネルパラメータに回転の指示を追加します。

  1. 設定ファイルを開く:bashsudo nano /etc/default/grub
  2. パラメータを追記する:
    GRUB_CMDLINE_LINUX_DEFAULT(または GRUB_CMDLINE_LINUX)の行に、fbcon=rotate:1 を追加します。
    • 例:GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity fbcon=rotate:1"
  3. GRUBの設定を更新する:bashsudo update-grub
  4. システムを再起動する:bashsudo reboot

注意事項

  • ハードウェアの制限: 使用しているビデオカードのドライバやハードウェア構成によっては、フレームバッファの回転(fbcon rotation)がサポートされていない場合があります。
  • 特定のアプリへの影響: この設定はコンソールのテキスト表示に対するものであり、フレームバッファを直接操作する一部のグラフィカルなアプリケーションには反映されないことがあります。 

この設定を試しても画面が変化しない場合、使用されているグラフィックドライバ名を教えていただけますか?

/etc/default/grubが新規ファイルとなっていたのですが、それでいいのでしょうか。 また、update-grubがcommand not foundで見つかりません。

/etc/default/grub

 が新規ファイルになり、update-grub コマンドが見つからない場合、お使いの環境は Raspberry Pi や ARMベースのシングルボードコンピュータ、あるいは クラウドイメージ(UEFIブートではない特殊な構成) である可能性が高いです。

これらの環境では GRUB の代わりに別のブートローダーや設定ファイルが使用されています。デバイスの種類に合わせて以下の方法を試してください。 

1. Raspberry Pi を使用している場合

Raspberry Pi版の Ubuntu Server では、設定は /boot/firmware/config.txt で管理されています。

  1. 設定ファイルを開く:bashsudo nano /boot/firmware/config.txt コードは注意してご使用ください。
  2. 回転設定を追記する:
    ファイルの末尾に以下の行を追加します。
    • 90度回転(時計回り): display_rotate=1
    • 270度回転(反時計回り): display_rotate=3
  3. 保存して再起動:
    Ctrl+O → Enter で保存し、Ctrl+X で終了した後、sudo reboot で再起動してください。

2. 一般的な環境(x86/64)で GRUB がない場合

最近の Ubuntu Server では、GRUB の代わりに systemd-boot が使われるケースがあります。その場合、カーネルパラメータを直接編集します。 

  1. コマンドでの即時確認(一時的):
    まず以下のコマンドで回転するか確認してください。bashecho 1 | sudo tee /sys/class/graphics/fbcon/rotate_all
  2. 永続化(スクリプト化):
    systemd-boot 環境でパラメータを渡すのが難しい場合、起動時に自動実行するスクリプトを作成するのが確実です。
    • crontab -e を実行し、末尾に以下を追記します:
      @reboot echo 1 > /sys/class/graphics/fbcon/rotate_all 

3. 使用しているデバイスの確認

もし上記で解決しない場合、どのようなハードウェア(PC、Raspberry Piなど)で実行しているか教えていただければ、より正確な設定ファイルをご案内できます。

まずは echo 1 | sudo tee /sys/class/graphics/fbcon/rotate_all を実行して、画面が回転するかどうか確認してみてください。 

Raspberry pi zero2wを使っています。rotate_allでは回転します。

Raspberry Pi Zero 2 W を使用している場合、ブートローダーが GRUB ではなく 

cmdline.txt という設定ファイルを読み込むため、update-grub コマンドは存在しません。

rotate_all コマンドで回転が成功しているのであれば、以下の手順で設定を永続化(再起動後も有効化)できます。

設定の永続化手順

  1. 設定ファイルを開く:
    Ubuntu Server on Raspberry Pi では、カーネルの起動オプションは以下のファイルに記述されています。bashsudo nano /boot/firmware/cmdline.txt コードは注意してご使用ください。※ 環境によっては /boot/cmdline.txt にある場合もあります。
  2. パラメータを追記する:
    ファイル内の既存の記述の最後(改行せず、半角スペースで区切って)に以下の文字列を追加します。textfbcon=rotate:1 コードは注意してご使用ください。
    • 1: 90度回転(時計回り)
    • 3: 270度回転(反時計回り)
    注意: cmdline.txt は必ず「1行」で記述されている必要があります。複数行に分けないよう注意してください。
  3. 保存して再起動:
    Ctrl+O → Enter で保存し、Ctrl+X で終了した後、再起動します。bashsudo reboot

もし上記でうまくいかない場合

Raspberry Pi のビデオドライバ(KMS/FKMS)が有効な場合、cmdline.txt の設定が無視されることがあります。その場合は、起動時に自動でコマンドを実行する設定を行います。

  1. crontab を編集:bashsudo crontab -e コードは注意してご使用ください。※初回起動時はエディタの選択が出るので nano を選んでください。
  2. 末尾に以下を追記:text@reboot echo 1 > /sys/class/graphics/fbcon/rotate_all
  3. 保存して終了すれば、起動のたびに自動で 90度回転が適用されます。

この設定を試した後、画面の向きは正しく反映されましたか?

OKです。

無事に回転したようで良かったです!

Raspberry Pi Zero 2 Wのようなリソースの限られた環境では、GRUBの代わりに Official Raspberry Pi Documentation にあるような cmdline.txt や config.txt を使うのが基本ルールになります。

今後、もし「画面の向きはいいけど、キーボードの入力方向(上下左右)も合わせたい」といったことがあれば、console-setup の設定変更が必要になるので、その際はお気軽にご相談ください。

他にディスプレイ表示や初期設定について、何かお手伝いできることはありますか?

raid5のアレイが応答しないので、cat /proc/mdstatを見たら、Personalities : [raid6] [raid5] [raid4] [raid0] [raid1] [raid10]md0 : inactive sdf1[3] sdb1[1] sdg1[5] sdc1[0] sde1[4] sdd1[2]11720309763 blocks super 1.2 unused devices:これはアレイが壊れたと言うことですか。

raid5のアレイが応答しないので、cat /proc/mdstatを見たら、Personalities : [raid6] [raid5] [raid4] [raid0] [raid1] [raid10]md0 : inactive sdf1[3] sdb1[1] sdg1[5] sdc1[0] sde1[4] sdd1[2]11720309763 blocks super 1.2 unused devices:これはアレイが壊れたと言うことですか。

突然アレイが inactive(非活性)になると焦りますよね。

結論から言うと、「アレイが構成情報を失って停止している」状態ですが、データが消えた(壊れた)と決まったわけではありません。

RAID5のメタデータ(管理情報)の読み込みに失敗したり、起動時にデバイスが揃わなかったりすると、このように「とりあえずデバイスは認識しているが、アレイとしては動かさない」という保護状態になります。

以下の手順で復旧を試みてください。

1. アレイを強制的に開始させる

まず、現在の構成情報を使ってアレイを再活性化(start)させます。

bash

sudo mdadm --run --assemble /dev/md0 /dev/sd[bcdefg]1

※もし mdadm.conf が正しく設定されているなら、単純に sudo mdadm --assemble --scan でも構いません。

2. それでも起動しない場合(詳細の確認)

上記でエラーが出る場合は、各ディスクのメタデータがどうなっているかを確認します。

bash

sudo mdadm --examine /dev/sd[bcdefg]1

ここで “State : clean” や “active” と表示されているか、あるいは “dirty” や “failed” になっているディスクがないかチェックしてください。

3. 注意点

  • --create は厳禁: 焦って mdadm --create を実行しないでください。データが完全に消去される可能性があります。 Linux RAID Wiki(英語)などの専門サイトでも、安易な再作成は推奨されていません。
  • 原因の切り分け: 物理故障(ケーブル抜けやHDDの寿命)が原因で inactive になることが多いです。dmesg コマンドで I/Oエラーが出ていないか確認してください。

まずは --assemble を試して、その結果(エラーメッセージなど)を教えていただけますか?

どのコマンドでエラーが出ましたか? または dmesg に何か怪しいログは残っていますか?

mdadm: –assemble would set mdadm mode to “assemble”, but it is already set to “misc”.

そのエラーは、「既に md0 という名前のデバイスが(不完全な状態で)存在しているため、新しくアセンブル(起動)モードに入れない」という mdadm の仕様によるものです。 

man7.orgman7.org

現在の md0 は inactive(非活性)としてシステムに掴まれているため、一度それを解放(停止)してからやり直す必要があります。 

以下の手順を試してください。

1. 現在の不完全なアレイを停止する

まず、現在 inactive で残っている /dev/md0 を一度停止させます。

bash

sudo mdadm --stop /dev/md0

2. 再度アセンブルを実行する

停止できたら、改めてアレイの起動を試みます。

bash

sudo mdadm --assemble --run /dev/md0 /dev/sdf1 /dev/sdb1 /dev/sdg1 /dev/sdc1 /dev/sde1 /dev/sdd1

※ ディスクが全て揃っているはずなのに起動しない場合は、末尾に --force を付けることで、多少の情報のズレを無視して強制起動させることができます。 

もし「device or resource busy」と出る場合

もし mdadm --stop でエラーが出る場合は、そのデバイスを何らかのプロセスが掴んでいます。

  • sudo zpool export(ZFSを使っている場合)や sudo vgchange -an(LVMを使っている場合)などで上位レイヤーを停止させてから再度試してください。

この手順で /proc/mdstat の表示は active に変わりましたか? エラーが出る場合はその内容を教えてください。

assemble で mdadm: failed to RUN_ARRAY /dev/md0: Invalid argument と出ます。

Invalid argument

 エラーは、「アセンブルしようとしているディスク間のメタデータ(Events値など)に不整合がある」か、「既に inactive 状態でカーネルに認識されている md0 が邪魔をしている」場合に発生します。

一度 md0 を完全に停止させた上で、情報のズレを無視して強制的に組み立て直す必要があります。

手順:強制アセンブルの実行

  1. 既存の不完全なアレイを停止する
    これをしないと、リソースが使用中(busy)になり、構成のやり直しができません。bashsudo mdadm --stop /dev/md0
  2. --force を付けてアセンブルする
    ディスクが全て揃っている(または1台欠けまで)場合、--force を使うことで、メタデータのわずかな差異(シャットダウン時のタイミングのズレなど)を無視してアレイを強制起動させます。bashsudo mdadm --assemble --run --force /dev/md0 /dev/sd[bcdefg]1

上記で解決しない場合(情報の確認)

もしこれでも Invalid argument が出る場合は、ディスクごとのステータスを確認し、どの個体が「古い」または「異常」と判断されているか特定する必要があります。

以下のコマンドの結果を確認してください。

bash

sudo mdadm --examine /dev/sd[bcdefg]1 | grep -E 'Update Time|Events|State'
  • Events の値が極端に離れているディスクはありませんか?
  • State が active ではなく failed や faulty になっているものはありませんか?

--force で起動に成功しましたか? もし失敗する場合、mdadm --examine の結果に Events値の食い違い がないか教えてください。

forceでもmdadm: failed to RUN_ARRAY /dev/md0: Invalid argumentになります。 examineではState : active Events : 69683 Array State : AAAAAA (‘A’ == active, ‘.’ == missing, ‘R’ == replacing) State : active Events : 69683 Array State : AAAAAA (‘A’ == active, ‘.’ == missing, ‘R’ == replacing) State : active Events : 69683 Array State : AAAAAA (‘A’ == active, ‘.’ == missing, ‘R’ == replacing) State : active Events : 69683 Array State : AAAAAA (‘A’ == active, ‘.’ == missing, ‘R’ == replacing) State : active Events : 69683 Array State : AAAAAA (‘A’ == active, ‘.’ == missing, ‘R’ == replacing) State : active Events : 69683 Array State : AAAAAA (‘A’ == active, ‘.’ == missing, ‘R’ == replacing) となります。

examine

 の結果、すべてのディスクで Events (69683) が一致し、Array State (AAAAAA) も正常であるにもかかわらず Invalid argument で失敗する場合、メタデータ自体ではなく、カーネルモジュールの不備デバイスの重複認識が原因である可能性が高いです。

以下の3つのポイントを順に確認してください。

1. RAIDモジュールが読み込まれているか確認 

カーネルが RAID5 を制御する「パーソナリティ(モジュール)」を正しく認識できていないときにこのエラーが出ることがあります。

bash

sudo modprobe raid456

を実行した後、再度 sudo mdadm --assemble --run --force /dev/md0 /dev/sd[bcdefg]1 を試してください。

2. 重複している「古い」アレイ情報を消去する

cat /proc/mdstat で md0 : inactive と表示されている場合、カーネルが古い構成情報をメモリ上に保持しており、新しい組み立て命令を拒否(Invalid argument)している状態です。

一度、確実に停止させてから再実行します。

bash

sudo mdadm --stop /dev/md0
# もし md127 など別の名前で inactive があればそれも停止
sudo mdadm --stop /dev/md127 

この後、cat /proc/mdstat を見て unused devices: <none> だけになったことを確認してからアセンブルしてください。

3. Bad Block Log (BBL) の影響を確認

最近の mdadm(1.2以降のメタデータ)では、ディスク上の不良セクタ情報をメタデータに書き込みますが、これが原因で起動できない場合があります。

bash

sudo mdadm --assemble --run --update=force-no-bbl /dev/md0 /dev/sd[bcdefg]1

※これにより不良ブロックログが無視され、起動できることがあります。

4. カーネルログ (dmesg) の確認

上記でも失敗する場合、エラーの真因がカーネルログに出力されています。

bash

dmesg | tail -n 20

ここに “md: personality for level 5 is not loaded!” や “block size conflict” といった具体的な理由が出ていませんか?

modprobe 後のアセンブルで変化はありましたか? もしダメなら dmesg の最後数行に記録されているエラーメッセージを教えてください。

modprobe後のassembleでmdadm: /dev/md0 has been started with 6 drives.と出ました。

無事にアレイが起動しましたね!お疲れ様でした。

mdadm: /dev/md0 has been started with 6 drives. という表示が出たのであれば、RAIDとしては正常に動き出しています。

念のため、以下の手順で最終確認と後処理を行ってください。

1. 状態の確認

まずは /proc/mdstat を見て、active になっていることと、リシンク(再同期)が走っていないか確認してください。

bash

cat /proc/mdstat

コードは注意してご使用ください。

md0 : active raid5 ... と表示され、末尾に [UUUUUU] とあれば完全復旧です。

2. ファイルシステムのマウント

アレイが認識されたので、次はデータを読み取れる状態にします。

bash

sudo mount /dev/md0 /mnt/your_mount_point

※ /mnt/your_mount_point はご自身の環境に合わせて読み替えてください。

3. 設定の保存(重要)

次回再起動時にまた inactive にならないよう、現在の(正常な)構成を mdadm.conf に反映させておくことを強く推奨します。

bash

# 現在の設定をスキャンして設定ファイルを更新
sudo mdadm --detail --scan | sudo tee /etc/mdadm/mdadm.conf
# 初期RAMディスクの更新(OS起動時にRAIDを正しく認識させるため)
sudo update-initramfs -u

なぜ動かなくなったのか?

今回 modprobe で解決したということは、「何らかの理由でRAID5のカーネルモジュールが自動ロードされなかった」ことが原因の可能性が高いです。OSのアップデート後や、initramfsの不整合で稀に発生します。

マウントして中のデータにはアクセスできましたか? もしマウント時にエラーが出る場合は、ファイルシステムのチェック(fsck)が必要になるかもしれません。

resync 97.0%ですね

ほぼ完了ですね!もう少しです。

現在、RAIDが全ディスクのデータの整合性を最終チェック(再同期)している状態ですが、97.0% ということは、あとわずかな時間で完了し、冗長性が完全に確保された状態(Clean)になります。

今後の流れと注意点

  1. そのまま待機:
    100%になるまでそのまま待ってください。watch cat /proc/mdstat と打つと、進捗をリアルタイムで監視できます。
  2. 負荷を避ける:
    再同期中はディスクI/Oが発生しているため、大量の書き込みや重い作業は避け、完了を待つのが安全です(読み取りは可能です)。
  3. 完了後の表示:
    完了すると、/proc/mdstat の表示が [UUUUUU](すべてU)となり、resync の文字が消えます。

念のためのアドバイス

今回、手動で modprobe しないと動かなかった点が気になります。前回の回答にある update-initramfs -u は、再同期が終わった後に必ず実行しておいてください。これを忘れると、次回の再起動時にまた同じ現象(inactive)が起きる可能性が高いです。

再同期が終わった後、ファイルの中身は無事に見られそうでしょうか? df -h などのコマンドでマウント状況も確認してみてください。

もういくつか投稿してるけど

もういくつか投稿してるけど

AIとのやりとりで自分の知識のなさを補完している私なのですが、1度やりとりしてもすぐ忘れてしまうので、このブログに記録を残すことにしました。

使っているのはGoogleさんのGeminiとChrome(これもGoogleですね)のAIモード。特にAIモードに関しては出典を表示してくれるのでありがたい。「AIモードとの会話」というカテゴリーに分けていますので、必要な方は見てください。

使った順番ではなく、適当です。

Ubuntuで最小限のメモリ使用量で画像を表示する

Ubuntuで最小限のメモリ使用量で画像を表示する

Ubuntuで最小限のメモリ使用量で画像を表示するには、Xサーバー(GUI)環境下での軽量ビューア、または端末(コンソール)環境下での表示ツールを使用します。

最もおすすめの軽量なツールは以下の通りです。

1. グラフィカル環境 (GUI) での最軽量ツール

Xサーバーが動いている環境で、非常に少ないメモリで高速に表示できます。 

  • feh
    • 特徴: コマンドラインベースで動作する、爆速かつ超軽量な画像ビューア。
    • インストール: sudo apt install feh
    • 使い方: feh image.jpg
    • 特徴: 画像をfitさせて表示、slideshow、キーボード/マウス操作に対応。
  • sxiv (Simple X Image Viewer)
    • 特徴: 名前通り、シンプルで高速、キーボード操作主体の画像ビューア。
    • インストール: sudo apt install sxiv
    • 使い方: sxiv image.jpg 

2. コンソール (CLI) 環境での最軽量ツール

GUIなし、またはSSH経由のターミナル画面で、画像ファイルを直接表示します。

  • fbi (Frame Buffer Imageviewer)
    • 特徴: フレームバッファを使用して、Xサーバーがなくてもコンソール画面に直接画像を表示。
    • インストール: sudo apt install fbi
    • 使い方: fbi image.jpg
    • 注意: 基本はコンソール(ローカル)での表示用。
  • viu
    • 特徴: ターミナル(端末)の中で画像を表示するツール。
    • インストール: sudo apt install viu
    • 使い方: viu image.jpg
    • 特徴: 画像を文字(ブロック文字)としてターミナルに描画。 

3. デフォルトの軽量ツール

  • Ristretto
    • 特徴: Xfceデスクトップ環境の標準画像ビューア。軽量でシンプル。
    • インストール: sudo apt install ristretto

まとめ(用途別)

  • とにかくメモリを抑えたい、かつGUIが良い: feh
  • GUIがなく、SSHターミナルで画像を見たい: viu
  • GUIがなく、直接サーバーの画面で画像を見たい: fbi 

メモリが極端に少ない環境(例: 512MB〜1GB RAM)の場合は、これら軽量ツールの使用を強く推奨します。

階層分けされた相当な数のjpgファイルの中からランダムに1つ抜き出すにはどうすればいいですか

階層分けされた相当な数のjpgファイルの中からランダムに1つ抜き出すにはどうすればいいですか

大量のファイルの中からランダムに1つだけを抽出するのは、手動では大変ですよね。
お使いの環境(Windows、Mac/Linux、またはPython)に合わせて、最も効率的な方法を紹介します。


1. Windows (PowerShell) を使う場合

特別なソフトをインストールせずに、標準機能だけで実行できます。

  1. 対象のルートフォルダ(一番上のフォルダ)を「Shift + 右クリック」します。
  2. PowerShell ウィンドウをここで開く」を選択します。
  3. 以下のコマンドをコピーして貼り付け、Enterを押します。

powershell

Get-ChildItem -Recurse -Filter *.jpg | Get-Random | Invoke-Item
  • 解説: Get-ChildItem -Recurse でサブフォルダまで全検索し、Get-Random で1つに絞り、Invoke-Item でそのファイルを開きます。

2. Mac / Linux (ターミナル) を使う場合

MacやLinuxの方は、ターミナルで以下のコマンドを実行するのが最も早いです。

  1. ターミナルを開き、対象フォルダへ移動します(cd /path/to/folder)。
  2. 以下のコマンドを実行します。

bash

find . -type f -iname "*.jpg" | shuf -n 1 | xargs open
  • 解説: find で全jpgを探し、shuf -n 1 でシャッフルして1行だけ取り出し、open で開きます。

3. Python を使う場合

もし「特定のフォルダにコピーしたい」など、その後の処理も自動化したい場合はPythonが便利です。

python

import os
import random
import glob

# 検索したいルートディレクトリを指定
root_dir = './your_folder_path' 

# 再帰的にjpgファイルをリストアップ
files = glob.glob(f"{root_dir}/**/*.jpg", recursive=True)

if files:
    random_file = random.choice(files)
    print(f"選ばれたファイル: {random_file}")
    # os.startfile(random_file) # Windowsでファイルを開く場合
else:
    print("jpgファイルが見つかりませんでした。")

💡 ヒント:ファイル数が「万」を超える場合

ファイル数が膨大な場合、OSの検索機能(エクスプローラーの検索窓に *.jpg と入力)を使い、検索結果が出揃ったところで適当にスクロールして目をつぶってクリックするのが一番アナログで速いこともあります。

次に行いたい作業はありますか?
「選んだファイルを特定のフォルダに集めたい」「名前を書き換えたい」など、具体的な要望があればコードを作成します。

Ubuntuの端末でjpgファイルを抜き出してfbi(フレームバッファイメージビューワー)で表示させたいです。

Ubuntuのターミナル(CUI環境)で、階層下のJPGからランダムに1つ選んで 

fbi で表示するには、以下のコマンドを組み合わせて実行します。

実行コマンド

対象のディレクトリに移動した状態で、以下のワンライナーを実行してください。

bash

find . -type f -iname "*.jpg" | shuf -n 1 | xargs -I {} sudo fbi -T 1 -a {}

コマンドの解説

  1. find . -type f -iname "*.jpg": カレントディレクトリ以下の全階層から、拡張子が .jpg(大文字小文字問わず)のファイルをリストアップします。
  2. | shuf -n 1: リストをシャッフルし、その中から1行(1ファイル)だけをランダムに抜き出します。
  3. | xargs -I {} sudo fbi -T 1 -a {}:
    • xargs -I {}: 前のコマンドの結果を {} という場所に代入して実行します。
    • sudo fbifbi はフレームバッファデバイス(/dev/fb0)に直接書き込むため、通常は 管理者権限 が必要です。
    • -T 1: 使用する仮想コンソール(TTY1など)を指定します。これがないとエラーになる場合があります。
    • -a: 画像を画面サイズに合わせて自動リサイズして表示します。 

注意点

  • 仮想コンソールでの実行fbi は X Window System(デスクトップ環境)上のターミナルエミュレータからは直接表示できませんCtrl + Alt + F3 などで切り替えた黒い画面(仮想コンソール)で実行してください。
  • デスクトップ環境で表示したい場合: もしGUI環境のターミナルから画像を表示したいのであれば、fbi の代わりに eog(Eye of GNOME)などを使うのが一般的です。bashfind . -type f -iname "*.jpg" | shuf -n 1 | xargs eog コードは注意してご使用ください。
  • 権限エラーの回避: 毎回 sudo を使いたくない場合は、ユーザーを video グループに追加することで解決できる場合があります。bashsudo usermod -aG video $USER コードは注意してご使用ください。(※実行後、再ログインが必要です) 

このコマンドを実行する環境は、サーバー版などのCUI環境(黒い画面)でしょうか? それともデスクトップ版のターミナルでしょうか?

CUIです

UbuntuのCUI(仮想コンソール)環境で、階層下のJPGからランダムに1つを選び、

fbi で表示するコマンドは以下の通りです。

実行コマンド

bash

find . -type f -iname "*.jpg" | shuf -n 1 | xargs -I {} sudo fbi -noverbose -T 1 -a {}

各オプションの解説

  • find . -type f -iname "*.jpg": カレントディレクトリ以下の全階層から、拡張子が .jpg(大文字小文字問わず)のファイルをリストアップします。
  • shuf -n 1: リストからランダムに1行(1ファイル)だけを抽出します。
  • xargs -I {} sudo fbi ... {}: 抽出されたパスを fbi コマンドに渡します。
    • sudofbi はフレームバッファ(画面描画デバイス)に直接アクセスするため、通常は管理者権限が必要です。
    • -noverbose: 画面下部のステータスバーを非表示にし、画像だけを綺麗に映します。
    • -T 1: 出力先の仮想端末(TTY)を指定します。SSH経由や特定の環境で「Invalid argument」エラーが出るのを防ぐために有効です。
    • -a: 画面サイズに合わせて画像を自動的に拡大・縮小(オートズーム)します。 

うまくいかない場合の代替案

もし fbi でエラーが出る、あるいはより高機能なツールを使いたい場合は、後継ソフトである fim (fbi improved) がおすすめです。

  1. インストールsudo apt install fim
  2. 実行コマンド:bashfind . -type f -iname "*.jpg" | shuf -n 1 | xargs -I {} fim -a {} コードは注意してご使用ください。
    • fim はデバイスの自動検出機能に優れており、fbi よりも安定して動作することが多いです。 

表示された画像を閉じるには q キーを押してください。 他に「一定時間ごとに自動で切り替えたい」などの要望はありますか? 

はい、一定時間ごとに画像を切り替えることを考えています。15~20秒ごと

CUI環境での自動スライドショーですね。

fbi には標準で自動巡回機能がありますが、「ランダムに選び続ける」という動作をさせるには、シェルスクリプトの while ループで回すのが最も確実です。

以下のコマンドをターミナルに貼り付けて実行してください。

実行コマンド(15秒ごとにランダム切り替え)

bash

while true; do
    find . -type f -iname "*.jpg" | shuf -n 1 | xargs -I {} sudo fbi -T 1 -t 15 -1 -a -noverbose {}
done

解説

  • while true; do ... done: 手動で終了(Ctrl+C)するまで、無限に処理を繰り返します。
  • -t 15fbi が画像を 15秒間 維持するように指定します。
  • -1: 1枚表示したらすぐに fbi を終了させ、ループの先頭(次のランダム抽出)に戻るようにします。
  • -noverbose: 切り替え時に画面下のファイル名表示などを消し、没入感を高めます。

より滑らかに動作させたい場合(fim 推奨)

fbi は起動のたびに画面が暗転しがちです。もし fim をインストール済みであれば、以下のコマンドの方がスマートに動作します。

bash

# fim を使う場合(15秒おき)
find . -type f -iname "*.jpg" | shuf | fim -a -p -t 15
  • shuf: 最初に全ファイルをシャッフルしてリスト化します。
  • -p: パイプからの入力を受け取ります。
  • -t 15: 15秒ごとに自動で次の画像へ進みます。

補足

  • 終了方法Ctrl + C でループを止めることができます。
  • 秒数の調整-t 15 の数字を 20 に変えれば20秒間隔になります。

特定のフォルダだけを除外したい、あるいは特定の時間になったら停止させたいといった追加の条件はありますか?

ありません。やってみます。また質問があったら書き込みますね。

承知いたしました!ぜひ試してみてください。

while ループを使った方法は、「毎回リストをシャッフルし直す」ので、ファイル数が膨大でも偏りなくランダムに表示され続けるはずです。

もし途中で「特定のフォルダだけ読み込まないようにしたい」や「画像が横向きになってしまうのを直したい」といったことがあれば、いつでもお気軽に書き込んでくださいね。

無事にスライドショーが動くことを願っています!Ctrl + C でいつでも終了できるので、安心してお試しください。

rsync: [generator] recv_generator: failed to stat “/mnt/nas10tb/Signage/20210518/20210518-15.jpg”: Bad message (74)何の意味?

rsync: [generator] recv_generator: failed to stat “/mnt/nas10tb/Signage/20210518/20210518-15.jpg”: Bad message (74)何の意味?

このエラーは、rsyncが特定のファイルの状態を確認(stat)しようとした際、OSレベルで「ファイルデータが壊れている」と判断されたことを意味します。

具体的には、Linuxのシステムエラー番号 74 (EBADMSG: Bad message) が発生しています。

主な原因

このエラーは単なるrsyncの不具合ではなく、ストレージや通信の根本的な問題である可能性が高いです。 

  • ファイルシステムの破損: NAS(/mnt/nas10tb)上の該当ファイルが物理的または論理的に破損しており、OSが読み取れない状態。
  • ハードウェアの故障: HDD/SSDの物理的な不良セクタや、NASのメモリ(RAM)エラー。
  • 通信経路の異常: NASとの接続に使用しているプロトコル(NFSやSMBなど)が不安定で、データ整合性が崩れている。

推奨される対処法

  1. ファイルの生存確認:
    該当ファイル(20210518-15.jpg)を ls -l や cat 等で手動で読み取れるか確認してください。同様にエラーが出る場合はファイル自体が壊れています。
  2. ファイルシステムのチェック:
    NAS側で管理画面やSSHを利用し、fsck などのコマンドでファイルシステムの修復を試みてください。
  3. NASのログ確認:
    NAS側のシステムログ(dmesgなど)に、I/Oエラーやディスクの異常(S.M.A.R.T.エラー)が記録されていないか確認してください。
  4. 再マウント:
    一時的な通信エラーであれば、NASをアンマウントして再度マウントし直すことで解消する場合があります。

まずは、該当するファイルを手動で別の場所にコピーできるか試してみるのが一番の切り分けになります。

    コピーできませんし、sudo rmで削除しようとしてもrm: cannot remove ‘/mnt/nas10tb/Signage/20210518/20210518-15.jpg’: Bad messageで拒否されます。

    sudo rm

     でも削除できない状態は、OSがファイルシステム上のデータ構造(メタデータ)を正しく解釈できていない深刻な不整合を示しています。

    「Bad message」エラーが出ている場合、通常のファイル操作コマンド(rmcpmv)は受け付けられません。以下の順序で対処を検討してください。

    1. NASの「修復機能」を実行する(最優先)

    マウントしているPC側から操作するのではなく、NAS自体のOS(管理画面)からチェックを行うのが最も安全です。

    • 管理画面から: QNAPやSynology、バッファロー等のNASであれば、ブラウザの管理画面にある「ストレージマネージャー」等から「ファイルシステムのチェック」や「ボリュームの修復」を実行してください。
    • RAIDの整合性チェック: RAID構成を組んでいる場合は、データスクラビング(整合性確認)を実行することで修復される可能性があります。

    2. ファイルシステムチェック(fsck)の実行

    Linuxサーバー等にHDDを直接接続、またはNASにSSHで入れる場合は fsck コマンドを使用します。

    注意fsck は必ず対象のパーティションを アンマウント(umount) した状態で実行してください。マウントしたまま行うとデータが完全に破壊される恐れがあります。

    bash

    # アンマウント(例: /dev/sdb1 が対象の場合)
    sudo umount /mnt/nas10tb
    
    # チェックと修復の実行
    sudo fsck -y /dev/sdb1
    

    ※ -y オプションはすべての修復提案に自動で “yes” と答える設定です。 1.4.6 

    3. ディレクトリごと削除を試みる

    ファイル単位で「Bad message」が出る場合でも、その親ディレクトリごと削除(rm -rf)することで、ディレクトリのエントリごと消去できる場合があります。

    • リスク: そのフォルダ内の正常なファイルもすべて消えます。必要なデータは先に別の場所へ退避させてください。
    • 方法sudo rm -rf /mnt/nas10tb/Signage/20210518/ 

    4. ハードウェア故障(不良セクタ)の疑い

    修復を試みてもエラーが消えない、あるいは fsck が途中で止まる場合は、HDDの物理的な不良セクタ(メディア故障)が原因です。 1.4.3

    • この場合、無理に書き込み(削除)を続けようとすると他のデータまで破損する恐れがあります。
    • NASのログで「I/O Error」や「SMART Error」が出ていないか確認し、異常があればHDDの交換を検討してください。

    このNASは、メーカー製品(QNAP/Synology等)でしょうか、それとも自作のLinuxサーバーでしょうか?機種や構成がわかれば、より具体的な修復手順を提示できます。

    自作のUbuntuサーバーです。

    自作のUbuntuサーバーで 

    Bad message により削除すらできない場合、ファイルシステムのメタデータが壊れており、カーネルがそのファイルへの操作を拒否しています。 

    以下の手順で、ファイルシステムの強制修復を試みてください。

    手順1:ファイルシステムの種類とデバイス名の確認

    修復には正確なデバイス名(/dev/sdb1 など)が必要です。以下のコマンドで確認してください。

    bash

    df -Th | grep /mnt/nas10tb
    
    • ここで表示される「Filesystem」列(例: /dev/sdc1)と「Type」列(例: ext4xfs)をメモしてください。

    手順2:アンマウント

    修復作業(fsck)は、対象のディスクをマウントしたまま行ってはいけません。 

    bash

    sudo umount /mnt/nas10tb
    

    コードは注意してご使用ください。

    ※ 「target is busy」と出る場合は、sudo fuser -mk /mnt/nas10tb でアクセス中のプロセスを強制終了させてから再度試してください。

    手順3:強制修復(fsck)の実行

    ファイルシステムの種類に合わせて以下のコマンドを実行します。

    • ext4 の場合:bashsudo fsck.ext4 -fy /dev/対象デバイス名 コードは注意してご使用ください。-f は強制チェック、-y はすべての修復に自動で「はい」と答えるオプションです。
    • XFS の場合:bashsudo xfs_repair /dev/対象デバイス名 コードは注意してご使用ください。 

    手順4:再マウントと確認

    修復が終わったら、再度マウントしてファイルが消えているか(または削除できるか)確認します。

    bash

    sudo mount -a
    ls /mnt/nas10tb/Signage/20210518/
    

    コードは注意してご使用ください。

    それでも解決しない場合

    もし fsck で「Input/output error」が出る、あるいは修復後も再発する場合は、HDDの物理故障(不良セクタ)が確定です。

    • dmesgの確認sudo dmesg | grep -i error で、ディスク関連のハードウェアエラーが出ていないかチェックしてください。
    • 物理故障の疑い: 故障している場合は、該当ドライブのデータを可能な限り救出した後、速やかにHDDを交換することをお勧めします。 

    現在、ファイルシステムの種類(ext4 や zfs など)は何を使用されていますか?

    対象のnas10tbはRAID5のアレイです。ext4を使用しています。

    自作のUbuntuサーバーかつRAID5(ext4)の環境で 

    Bad message が出ている場合、「RAIDアレイ内の特定のディスクで読み取りエラーが発生し、それがファイルシステムの破損(メタデータの矛盾)として現れている」 可能性が非常に高いです。

    通常の rm では消せないため、以下の手順で RAIDの整合性チェック と ファイルシステムの修復 を組み合わせて対処してください。

    手順1:RAIDの状態を確認する

    まず、RAIDアレイ自体が正常(Active)か、どこかのディスクが脱落(Degraded)していないか確認します。

    bash

    cat /proc/mdstat
    
    • [UUU] のようにすべて U であれば正常です。[_UU] のように _ がある場合はディスクが故障しています。 1.5.3

    手順2:RAIDの整合性チェック(check)を実行 

    RAID5のパリティを利用して、不整合を修復させます。これにより、ファイルシステムレベルの修復(fsck)が通りやすくなることがあります。 1.5.4 

    bash

    # md0 はご自身の環境に合わせて読み替えてください
    echo check | sudo tee /sys/block/md0/md/sync_action
    
    • /proc/mdstat を見ると進捗が確認できます。10TBだと数時間〜一日以上かかる場合があります。 

    手順3:アンマウントして fsck を実行

    RAIDのチェックが終わるか、あるいは待てない場合は、対象のアレイをアンマウントして ファイルシステムの強制修復 を行います。 

    bash

    # 1. アンマウント
    sudo umount /mnt/nas10tb
    
    # 2. 強制修復(-f: 強制, -y: 全てyesで修復)
    sudo fsck.ext4 -fy /dev/md0
    
    • Bad message の原因となっている不正なiノードやディレクトリエントリがここで修正・削除されます。 1.3.1

    手順4:ディスクの物理故障を確認(重要)

    Bad message は物理故障の前兆であることが多いです。特定のディスクに異常がないか、S.M.A.R.T.情報を確認してください。 1.2.8

    bash

    # 各物理ディスク(/dev/sda, sdb...)に対して実行
    sudo smartctl -a /dev/sda | grep -i error
    
    • Reallocated_Sector_Ct や Current_Pending_Sector の値が 0 以外であれば、そのディスクの寿命です。

    アドバイス:
    RAID5は1台の故障には耐えられますが、修復中(リビルド中)に2台目が壊れると全データが消失します。10TBの大容量HDDではリビルド負荷で連鎖故障が起きやすいため、もし fsck で直っても、早めに重要なデータのバックアップを別の媒体に取ることを強くお勧めします。 1.3.7 

    まずは cat /proc/mdstat の結果に _(異常)が含まれていないか教えていただけますか

    全てUです。S.M.A.R.T.情報にも問題はありませんでした。いまfsckをかけています。

    RAIDアレイ(

    mdstat)も物理ディスク(S.M.A.R.T.)も正常であるとのこと、ひとまず「物理的な崩壊」の可能性が低そうで安心しました

    となると、今回の原因はハードウェア故障ではなく、「OSのクラッシュ」「停電」「不適切なアンマウント」などによって、ext4のメタデータ(管理情報)に論理的な矛盾が生じたものと考えられます。

    fsck実行中の注意点と次のステップ

    1. 「lost+found」ディレクトリの確認
      fsck -fy が完了して再マウントした後、/mnt/nas10tb/lost+found/ を覗いてみてください。
      ファイル名が特定できなくなったデータが #12345 のような番号で復元されている場合があります。今回エラーが出ていた 20210518-15.jpg も、実体が生きていればここに放り込まれている可能性があります。 参考: Cyberciti – lost+found folder
    2. rsyncの再開
      修復が終われば、再び rsync が通るようになるはずです。
      もし rsync がまた止まるようなら、別のディレクトリにも同様の破損が潜んでいるサインですので、再度 fsck が必要になるかもしれません。
    3. dmesg のモニタリング
      もし fsck 中に大量の「Pass 1: Checking inodes, blocks, and sizes」的な修正が走っているなら、完了後に念のため以下を実行して、カーネルがまだ何か文句を言っていないか確認してください。bashdmesg | tail -n 50 コードは注意してご使用ください。

    10TBという大容量だと fsck の完了まで時間がかかるかもしれませんが、途中で中断(Ctrl+C)しないようにだけご注意ください。

    無事に 20210518-15.jpg(あるいはその残骸)が消去または修復されることを祈っています。修復完了後、正常にアクセスできるようになったか教えてくださいね。

    fsckで修復されたようです。念のためcpして内容の確認もしておきます。

    無事に 

    fsck で修復できたようで何よりです!
    物理故障(S.M.A.R.T.エラー)がなく、アレイも正常(All U)だったことから、純粋なファイルシステムの論理矛盾だった可能性が高いですね。

    cp での確認は非常に賢明な判断です。以下の点もあわせてチェックしておくと安心です。

    1. ファイルの整合性:
      コピーできたとしても、画像ファイル(.jpg)の場合、下半分がグレーになっていたりノイズが乗っていたりすることがあります。一度ビューアーで開いて画像が壊れていないか確認することをおすすめします。
    2. rsync の再走:
      原因となったファイル以外にも、インデックス(inode)が狂っていた箇所があるかもしれません。一度 rsync --dry-run を実行して、他に同様のエラーが出ないかサッと流してみるのが確実です。
    3. lost+found の掃除:
      もし fsck で「ファイル名が特定できないデータ」が救出されていた場合、マウントポイント直下の lost+found フォルダに溜まっています。不要であれば容量を食うだけなので、確認後に削除してOKです。

    今回のトラブルが一時的なソフトエラー(書き込み中の瞬断など)であれば良いのですが、もし今後も頻発するようなら、SATAケーブルの接触不良メモリ(RAM)の相性・故障も疑ってみてください。

    このまま rsync は無事に完走しそうですか?

    やってみます。ありがとうございました。

    承知いたしました。無事に解決することを祈っています!

    もし rsync 中に再び似たようなエラー(Bad message や Input/output error)が出る場合は、ファイルシステムではなく、RAIDコントローラやケーブル、あるいはメモリ(RAM)など、別のレイヤーのトラブルも疑う必要が出てきます。

    しばらくは dmesg -w などでシステムログを監視しながら作業を進めてみてください。

    また何かお困りのことがあれば、いつでもご相談ください。
    rsync が無事に完走することを願っています!

    macOSで作業しています。フォルダ内に画像が沢山入っているフォルダがいくつかあります。jpgとpngが混在しています。中にはjpegというのもあります。全てjpgに統一したいのです。スクリプトを組みたいのですが、サンプルをお願いします。

    macOSで作業しています。フォルダ内に画像が沢山入っているフォルダがいくつかあります。jpgとpngが混在しています。中にはjpegというのもあります。全てjpgに統一したいのです。スクリプトを組みたいのですが、サンプルをお願いします。

    macOSで画像形式(拡張子)を一括でJPGに統一するには、標準搭載されている強力な画像処理コマンド sips を使用するのが最も効率的です。 

    以下に、特定のフォルダ(およびその中にある子フォルダ)内の画像をすべて .jpg に変換し、元のファイルを削除するスクリプトのサンプルを紹介します。

    1. ターミナルで実行するワンライナー

    最も手軽な方法です。対象のフォルダに移動して実行してください。

    zsh

    # 対象のフォルダへ移動
    cd /path/to/your/folder
    
    # png, jpeg, JPEG などを一括で jpg に変換
    for f in *.{png,jpeg,JPEG,PNG}; do [ -f "$f" ] && sips -s format jpeg "$f" --out "${f%.*}.jpg" && rm "$f"; done
    
    • sips -s format jpeg: 画像をJPEG形式に変換します。
    • ${f%.*}.jpg: 元のファイル名から拡張子を取り除き、一律 .jpg を付与します。
    • rm "$f": 変換が成功した後に元のファイルを削除します(不要な場合は削除してください)。 

    2. 複数のフォルダ(サブフォルダ)をまとめて処理するスクリプト

    階層構造になっている複数のフォルダを一度に処理したい場合は、以下のスクリプトをファイル(例: convert.sh)として保存して実行してください。

    bash

    #!/bin/bash
    
    # 変換したい親フォルダのパスを指定
    TARGET_DIR="./target_images"
    
    # 指定フォルダ内の png, jpeg を探し、1つずつ jpg へ変換
    find "$TARGET_DIR" -type f \( -iname "*.png" -o -iname "*.jpeg" \) | while read -r file; do
        # 出力ファイル名を作成(拡張子を .jpg に変更)
        output="${file%.*}.jpg"
        
        # 変換実行
        sips -s format jpeg "$file" --out "$output" > /dev/null 2>&1
        
        # 変換が成功し、かつ元ファイルと別名であれば元を削除
        if [ $? -eq 0 ] && [ "$file" != "$output" ]; then
            rm "$file"
            echo "Converted: $file -> $output"
        fi
    done
    

    実行方法

    1. テキストエディタに上記コードを貼り付け、convert.sh として保存します。
    2. ターミナルで実行権限を与えます:chmod +x convert.sh
    3. スクリプトを実行します:./convert.sh

    補足・注意点

    • 画質の指定sips -s formatOptions 80 のようにオプションを追加することで、圧縮率(画質)を調整できます(0〜100、デフォルトは約80)。
    • 既存の .jpg: 元々 .jpg という拡張子のファイルは、このスクリプトでは(二重変換を避けるため)処理対象から外しています。
    • バックアップ: 大量のファイルを操作するため、実行前にフォルダのコピー(バックアップ)を取っておくことを強く推奨します。 

    スクリプトではなく、Finderの右クリックメニュー(クイックアクション)から一括変換したい場合は、Automator を使用して「イメージのタイプを変更」アクションを設定する方法も便利です。 

    処理したいフォルダの構造(1つのフォルダか、階層構造か)や、変換後の画質へのこだわりはありますか?

    画質はデフォルトでOKです。フォルダ構造はフォルダの中に1階層だけです。

    「親フォルダ > 子フォルダ > 画像ファイル」という1階層の構造ですね。

    macOS標準の sips コマンドを使用し、子フォルダ内の .png や .jpeg を一括で .jpg に変換し、元のファイルを削除するスクリプトを作成しました。 

    1. 実行用スクリプト(保存して使う場合)

    以下のコードをテキストエディタに貼り付け、convert.sh という名前で保存してください。

    bash

    #!/bin/zsh
    
    # 1. 処理したい「親フォルダ」のパスを指定してください
    # 例: TARGET_DIR="$HOME/Desktop/MyPhotos"
    TARGET_DIR="./対象の親フォルダ名"
    
    # 2. 親フォルダ直下の子フォルダをループ処理
    for subfolder in "$TARGET_DIR"/*(/); do
        echo "Processing folder: $subfolder"
        
        # 3. 子フォルダ内の png, jpeg, JPEG, PNG を探して変換
        # 拡張子が jpg 以外のものを対象にします
        for file in "$subfolder"/*.{png,jpeg,PNG,JPEG}(N); do
            # 出力ファイル名(拡張子を .jpg に変更)
            output="${file%.*}.jpg"
            
            # sipsで変換実行
            sips -s format jpeg "$file" --out "$output" > /dev/null 2>&1
            
            # 変換に成功し、かつ元ファイルと別名なら元を削除
            if [[ $? -eq 0 && "$file" != "$output" ]]; then
                rm "$file"
            fi
        done
    done
    
    echo "完了しました。"
    

    使い方

    1. パスの書き換えTARGET_DIR の部分を作業したいフォルダ名(またはパス)に書き換えます。
    2. 実行権限の付与: ターミナルで chmod +x convert.sh を実行します。
    3. 実行./convert.sh で開始します。

    2. ターミナルで即座に実行する(ワンライナー)

    スクリプトを作らずに、ターミナルで親フォルダまで移動(cd)してから直接実行する方法です。 

    zsh

    for d in *(/); do for f in "$d"/*.{png,jpeg,PNG,JPEG}(N); do sips -s format jpeg "$f" --out "${f%.*}.jpg" && rm "$f"; done; done
    
    • *(/): フォルダ(ディレクトリ)のみを対象にします。
    • (N): 該当する拡張子のファイルがない場合にエラーを出さない設定です。

    注意事項

    • 上書き確認: このスクリプトは変換後に元のファイルを削除 (rm) します。念のため、最初はテスト用のフォルダで動作を確認するか、バックアップを取ってから実行してください 1.2.2, 1.3.1。
    • 拡張子の統一: 全て小文字の .jpg に統一されます。 

    このスクリプトを定期的に使いたい、あるいは特定の画質(圧縮率)を指定したいといったご要望はありますか?

    Windows11でデバイスドライバには認識されているにもかかわらず、ドライブDとして認識されていないHDDがあります。どうチェックすればいいですか。

    Windows11でデバイスドライバには認識されているにもかかわらず、ドライブDとして認識されていないHDDがあります。どうチェックすればいいですか。

    Windows 11でデバイスマネージャーには表示されているのに「Dドライブ」として認識されない場合、ハードウェア自体はPCに繋がっていますが、「OS側でドライブレター(D:)が割り当てられていない」か、「パーティションが未定義」である可能性が高いです

    以下の手順で「ディスクの管理」ツールを使用してチェック・修正してください。

    1. 「ディスクの管理」を開く 

    1. 画面下の「スタート」ボタンを右クリックします。
    2. メニューから [ディスクの管理] を選択します。 

    2. ディスクの状態を確認する 

    開いた画面の下半分にある「ディスク 0」「ディスク 1」といった一覧から、該当のHDDを探します。その右側のバー(ボリューム)の状態によって対処が異なります。

    • 「未割り当て」と表示されている場合
      • 原因: パーティションが作成されていません(新品のHDDなど)。
      • 対処: 右クリックして [新しいシンプルボリューム] を選択し、画面の指示に従ってフォーマットとドライブ文字の割り当て(D:)を行います。※データは消去されるため、データが入っているはずの場合は注意してください。
    • 「(文字なし)」または「正常」でバーが青い場合
      • 原因: パーティションはあるが、ドライブレター(D:など)が割り当てられていません。
      • 対処: その部分を右クリックし、[ドライブ文字とパスの変更] を選択 → [追加] を押し、ドライブ文字に「D」を割り当てて [OK] をクリックします。
    • 「不明・初期化されていません」と表示されている場合
      • 原因: パーティションスタイルが設定されていません。
      • 対処: 「ディスク X」と書かれた左端の領域を右クリックして [ディスクの初期化] を行います。通常は「GPT」を選択します。 エプソン ホームページエプソン ホームページ +4

    3. それでも認識されない場合のクイックチェック

    • USBポートの変更: ポータブルHDDの場合、電力不足で動作が不安定になることがあります。PC背面のポートや別のUSBポートに差し替えてみてください。
    • ドライバーの再認識: デバイスマネージャーで該当のHDDを右クリックし、[デバイスのアンインストール] を選んだあと、PCを再起動して自動で再読み込みさせてください。 

    まずは「ディスクの管理」で、そのHDDのバーがどのような色や名前(未割り当て、正常など)になっているかを確認してみるのが第一歩です。

    今「ディスクの管理」を開いたとき、該当のドライブは何色のバーで表示されていますか?

    macOSを使っています。zipファイルが沢山入っているフォルダがあります。AppleDoubleを削除する必要があります。スクリプトを組みたいのですが、教えてもらえますか。

    macOSを使っています。zipファイルが沢山入っているフォルダがあります。AppleDoubleを削除する必要があります。スクリプトを組みたいのですが、教えてもらえますか。

    macOSでZIPファイル内に含まれる AppleDouble(._ で始まる隠しファイル) を一括削除するには、標準の zip コマンドの削除オプション(-d)を利用したシェルスクリプトが効率的です。 

    以下のスクリプトは、指定したフォルダ内のすべての .zip ファイルを走査し、内部の __MACOSX ディレクトリや ._ ファイルを削除します。

    AppleDouble 削除用シェルスクリプト

    bash

    #!/bin/bash
    
    # 対象のフォルダパスを指定(例: ~/Documents/zips)
    TARGET_DIR="パスを入力してください"
    
    # フォルダが存在するか確認
    if [ ! -d "$TARGET_DIR" ]; then
      echo "Error: Directory $TARGET_DIR does not exist."
      exit 1
    fi
    
    # フォルダ内の全zipファイルに対してループ処理
    find "$TARGET_DIR" -name "*.zip" -type f | while read -r zip_file; do
      echo "Processing: $zip_file"
      
      # zip内の AppleDouble 関連ファイルを削除
      # "__MACOSX/*" : リソースフォークが格納されるディレクトリ
      # "*/._*" : ファイル単位の AppleDouble ヘッダー
      zip -d "$zip_file" "__MACOSX/*" "*/._*" "._*" > /dev/null 2>&1
      
      if [ $? -eq 0 ]; then
        echo "  -> Cleaned successfully."
      else
        echo "  -> No AppleDouble files found or error occurred."
      fi
    done
    
    echo "Done."
    

    使い方

    1. テキストエディタ(標準の「テキストエディット」や VS Code など)を開き、上記をコピー&ペーストします。
    2. TARGET_DIR="パスを入力してください" の部分を、実際のフォルダパス(例:"/Users/あなたの名前/Desktop/test")に書き換えます。
    3. clean_zip.sh という名前で保存します。
    4. ターミナルを開き、以下のコマンドで実行権限を与えて実行します。bashchmod +x clean_zip.sh ./clean_zip.sh コードは注意してご使用ください。

    補足事項

    • AppleDoubleとは: macOS特有の「リソースフォーク(アイコン情報やメタデータ)」を、macOS以外のシステム(WindowsやLinux)でも保持するために生成される ._ から始まるヘッダーファイルのことです。
    • zip -d オプション: ZIPファイルを展開することなく、内部の特定のファイルのみを削除できるため、ファイル数が多い場合に非常に高速です。
    • 注意: スクリプトを実行する前に、念のためフォルダのバックアップを取っておくことをお勧めします。 

    特定のフォルダではなく、デスクトップ上のすべてのZIPを対象にするなど、さらに絞り込みが必要な場合は教えてください。