【发布时间】:2020-07-08 12:20:28
【问题描述】:
所以我一直在研究一个 shell 脚本,它将在下载文件夹中查找并检查它及其子目录中的特定文件类型,然后将包含这些文件的目录移动到适当的文件夹中。 (例如,包含 .mp3 文件的下载文件夹中的专辑将移至音乐文件夹,包含 .mp4 文件的电视节目将移至视频文件夹)但我遇到了一些问题,我不知道是什么继续。
这是脚本:
#MOVES MUSIC FROM DOWNLOADS TO MUSIC FOLDER
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.mp3" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Music/
done
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.flac" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Music/
done
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.wav" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Music/
done
#MOVES VIDEOS FROM DOWNLOADS TO VIDEOS FOLDER
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.mkv" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Videos/
done
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.mp4" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Videos/
done
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.avi" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Videos/
done
#MOVES IMAGES FROM DOWNLOADS TO PICTURES
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.jpg" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Pictures/
done
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.png" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Pictures/
done
for DIR in /home/kevin/Downloads/*/
do
[ $(find "$DIR" "*.gif" | wc -l) -ne 0 ] && mv "$DIR" /home/kevin/Pictures/
done
有趣的是,它确实有效,但并不像预期的那样。所以在我的下载文件夹中,我有两个子目录。一个是包含 mp3 的专辑,另一个是包含 .mp4 的电视节目。当我运行脚本时,它会将这两个文件夹移动到 /home/kevin/Videos。很奇怪。
所以我认为将所有这些代码放在一个脚本中可能会出现问题,所以我将每个部分分成了自己的脚本,一个用于移动音乐,名为 move_music.sh,另一个用于移动视频,名为 move_video.sh。我将专辑和电视节目移回下载文件夹以测试这些新脚本,但问题是如果我运行 move_video.sh 它将电视节目和专辑移动到音乐文件夹。如果我将文件夹放回下载并运行 move_music.sh 它会将两个文件夹移动到音乐文件夹!
有人知道这里发生了什么吗?任何帮助将不胜感激!
【问题讨论】:
-
尝试查看
find "$DIR" "*.oops"的输出