我有一个bash脚本,它被设计在一个Linux目录中运行,该目录只包含不同格式的图像文件和视频文件的集合。执行后,脚本将查看Vids和Pics子目录是否存在,如果不存在,则创建它们。然后所有的图像文件应该被移动到Pics和视频文件移动到视频。
但是当脚本执行时,目录被创建,但没有文件被移动到其中。
有bash专家可以快速查看并建议修复吗?
#!/bin/bash
echo "This script will check for the existence of 'Vids' and 'Pics' subdirectories and create them if they do not exist. It will then move all image files into 'Pics' and all video files into 'Vids'. Do you wish to proceed? (y/n)"
read proceed
if [ $proceed == "y" ]; then
if [ ! -d "Vids" ]; then
mkdir Vids
fi
if [ ! -d "Pics" ]; then
mkdir Pics
fi
find . -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" -exec mv {} Pics/ ;
find . -name "*.mp4" -o -name "*.avi" -o -name "*.mkv" -o -name "*.wmv" -exec mv {} Vids/ ;
echo "Image files have been moved to 'Pics' and video files have been moved to 'Vids'."
else
echo "Exiting script."
fi
我将脚本命名为test.sh并赋予它执行权限。当我运行这个脚本时,它运行在一个包含大量图像和视频文件的目录中。剧本问我是否想继续。当我说是的时候,它说创建了"视频"one_answers"图片"目录,所有的文件都移到了其中。然后脚本结束。但是没有一个文件被移动,尽管创建了目录Vids和Pics。
隐式AND
操作符的优先级高于-o
,因此您的命令相当于:
find . -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o ( -name "*.gif" -exec mv {} Pics/ ; )
,所以它只对*.gif
执行-exec
,而不是其他扩展。你需要用圆括号括住所有的-name
表达式。
find . ( -name "*.jpg" -o -name "*.jpeg" -o -name "*.png" -o -name "*.gif" ) -exec mv {} Pics/ ;