web-dev-qa-db-ja.com

フォルダーの内容が更新されたときに表示するBash行

ファイルが特定のフォルダーに入ったときに検出するbashスクリプトを探しています。基本的に、ファイルがデスクトップの特定のフォルダーに入ったときに(wslでウィンドウを使用して)検出するスクリプトを作成し、ファイル名の最後に.pngを追加します(長い話、それが起こる必要があるだけです)。次に、デスクトップ上の別のファイルに移動します。友達が作ったファイルの名前を変更する何かがあり、トラブルシューティングに協力しました

for i in /[directory here] ; do mv "$i" "$i.png" ; done

今、私はそれを自動化する必要があるだけです。彼はすでに多くのことをしてきたので、私は彼にこれ以上迷惑をかけたくはありません。

2
Aidan Quiett

inotify-toolsを使用できます

これをインストールするには、ターミナルで次のコマンドを実行します。

Sudo apt install inotify-tools

これを使用して目的を果たすには、次の手順に従ってください。

  1. ターミナルで次のコマンドを実行して、ホームディレクトリにスクリプトファイルを作成および編集します。

    nano ~/File_Monitor.sh

  2. 次のコードをコピーしてエディタに貼り付け、PATH_TO_DIRECTORYを監視するディレクトリの完全パスに置き換えます。

#!/bin/bash
inotifywait -m PATH_TO_DIRECTORY -e create |
    while read path action file;
        do
                echo "$path$file was created"
                mv "$path$file" "$path$file.png"
                echo "and renamed to $path$file.png"
        done

  1. スクリプトファイルを保存し、を押してエディターを終了します。 CtrlX 次に押します Y

  2. ターミナルで次のコマンドを実行して、スクリプトファイルを実行可能にします。

    chmod +x ~/File_Monitor.sh

  3. ターミナルで次のコマンドを実行して、スクリプトを実行します。

    bash ~/File_Monitor.sh

完了しました。監視対象ディレクトリに追加されたすべての新しいファイルの名前はOriginal_File_Name.pngに変更されます。


通知:

何らかの理由でinotify-toolsをインストールできない場合は、手順2のコードを次のコードで置き換えることもできます。PATH_TO_DIRECTORYを目的のディレクトリの完全パスで変更しますモニター:

#!/bin/bash

while true
do
       sleep 1
       find PATH_TO_DIRECTORY -type f ! -name "*.*" -exec mv {} {}.png \;
done

それは仕事を成し遂げるでしょう。

最高の幸運

4
Raffa

フォルダーに.pngが終了していないファイルが含まれているかどうかを検出し、末尾に「.png」を追加して修正する方法があります。

実行ファイルを作成するだけです

touch pngchecker

それを実行可能にする

chmod +x pngchecker

nanoなどのファイルエディタを開く

nano pngchecker

次に、テキストエディタで次のコードを挿入します。

#!/bin/bash

testForEnding () {
    echo $file | grep -qE ".png"
    if [ $? == 0 ]; then
        echo "$file has right ending"
    else
        echo "$file has wrong ending -- WROOONGGG"
        mv $file $file.png
        echo " -> fixed!"
    fi
}

if [ -z $@ ]; then         # check whether a path/to/png_folder is given
    echo "Please provide a path/to/png_folder"
    exit 1
fi

for file in $@* ; do testForEnding ; done

最後に入力する必要があります

./pngchecker path/to/file/ 

スクリプトが何らかのイベント(またはcronジョブとして実行されるか、システムの起動時に実行される)によってトリガーされる必要がある場合は、スクリプトをパスに追加すると非常に便利です。

そうすることで、この部分を削除することもできます

if [ -z $@ ]; then         # check whether a path/to/png_folder is given
    echo "Please provide a path/to/png_folder"
    exit 1
fi

そして単にコマンドを実行する

pngchecker

そこにcdした後、任意のフォルダー

0
boms606