注意:

注意:

我正在寻找一个可以检测文件何时进入特定文件夹的 bash 脚本。基本上,我最终想制作一个脚本,它可以检测文件何时进入我桌面上的某个文件夹(使用带有 wsl 的 Windows),在文件名末尾添加 .png(说来话长,只需要这样做),然后移动到我桌面上的另一个文件。我有一些东西可以重命名文件,因为一个朋友做了它,我们一起解决了它的问题

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

现在我只需要自动化它。我不想再打扰他了,因为他已经做了很多,而我对 Ubuntu 还不太了解,不知道该怎么做

答案1

您可以使用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. 保存脚本文件并按Ctrl+X然后按退出编辑器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

它将完成这项工作。

答案2

有一种方法可以检测文件夹是否包含以非 .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 进入到你想要的任何文件夹后

相关内容