SH脚本根据文件名将文件从一个目录移动到另一个目录

fed*_*dxc 4 bash shell

我正在尝试编写一个sh脚本,该脚本将在我的一个下载完成后运行.

它应该在〜/ Downloads上查找特定的文件名,并根据文件名将其移动到不同的目录.

即我已经下载了Glee的最后一集,文件名为:

glee_some_trash_files_always_have.mkv
Run Code Online (Sandbox Code Playgroud)

它应该移动到

~/TVshows/Glee/
Run Code Online (Sandbox Code Playgroud)

这就是我能做到的:

#!/bin/bash

if filename in ~/Downoads; then
result=
if filename = *glee*; then
result= mv $filename ~/TVshows/Glee/
else
if filename = *pokemon*; then
result= mv $filename ~/TVshows/pokemon/
endif
done
Run Code Online (Sandbox Code Playgroud)

我的方法是否正确?请注意我是新来的.

提前致谢.

###############################################################################
Run Code Online (Sandbox Code Playgroud)

编辑:这是我的脚本,我希望其他人能发现它有用:

#!/bin/bash

cd "$HOME/Downloads"
# for filename in *; do
find . -type f | while IFS= read filename; do # Look for files in all ~/Download sub-dirs
  case "${filename,,*}" in  # this syntax emits the value in lowercase: ${var,,*}  (bash version 4)
     *.part) : ;; # Excludes *.part files from being moved
     move.sh) : ;;
#    *test*)            mv "$filename" "$HOME/TVshows/Glee/" ;; # Using move there is no need to {&& rm "$filename"}
     *test*)           scp "$filename" "imac@imac.local:/users/imac/Desktop/" && rm "$filename" ;;
     *american*dad*)   scp "$filename" "imac@imac.local:/users/imac/Movies/Series/American\ Dad/" && rm "$filename" ;;
     *) echo "Don't know where to put $filename" ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

gle*_*man 8

这是shell的case声明派上用场的地方:

#!/bin/bash
cd "$HOME/Downloads"
for filename in *; do
  # this syntax emits the value in lowercase: ${var,,*}  (bash version 4)
  case "${filename,,*}" in
    glee*)    mv "$filename" "$HOME/TVshows/Glee/" ;;
    pokemon*) mv "$filename" "$HOME/TVshows/pokemon/" ;;
    *) echo "don't know where to put $filename";;
  esac
done
Run Code Online (Sandbox Code Playgroud)