使用 Bash 脚本移动文件

使用 Bash 脚本移动文件

我有一个监视文件夹的 bash 脚本,如果文件夹中添加了某些内容,则脚本会将监视文件夹内的所有内容移动到定义的目的地。

问题:- 脚本无法通过 FileZilla (FTP) 将受监控文件夹中的文件移动到目标文件夹。如果您通过 shell 提示手动将文件移动到受监控文件夹,则脚本可以正常工作。FTP 是唯一无法正常工作的格式。

您知道这个问题可能是什么吗?

脚本如下:

inotifywait -m ~/folderA/fileA -e moved_to |
    while read path action file; do
        #echo "The file '$file' appeared in directory '$path' via '$action'"
        # do something with the file
    mv ~/folderA/fileA/* "/folderB/myNewDest"
    done

答案1

首先,只inotifywait -e moved_to监视文件已移动到目标目录,你忽略了对文件的监控书面或者覆盖例如,通过Filezilla。添加-e modify -e create到您的命令中,或者,除非您有令人信服的理由忽略某些inotifywait事件,否则请丢弃所有-e whatever选项。

其次,如果不在命令中引用文件,mv ~/folderA/fileA/* "/folderB/myNewDest"则可能会被愚蠢的文件名所困扰,例如foo;rm -rf *。我建议

find ~/folderA/fileA/ -maxdepth 0 -type f -print0 | \
xargs -0 mv --target-directory=/folderB/myNewDest --

其作用相同,但更安全。

相关内容