Open netpi opened 4 years ago
您好,Hazel规则第一个执行的shell脚本内容是什么能发一下吗?我这无法导入规则,看不到此项内容
@on7line 您好,Hazel规则第一个执行的shell脚本内容是什么能发一下吗?我这无法导入规则,看不到此项内容
_root 可替换成存储的根目录
_root=~/Library/Mobile\ Documents/com\~apple\~CloudDocs/Marked_iCloud/
_sortIntoSubfolderByKind=1
smartMv(){
# Variable definitions start
file=$1 # file path
_root=$2 # root directory
sortByKind=$3 # if needed sort by kind in Folders
fileName=$(basename -- "$file")
# Variable definitions ended
# function defined
moveTO(){
if `[ -d $2 ]` # if folder exist
then mv $1 $2/${3}
else
mkdir -p $2
mv $1 $2/${3}
fi
}
mdlsFormat(){ # format result for `mdls`
echo `mdls -name $1 $2 | cut -d "=" -f 2 | sed 's/\"//g' | sed -e 's/^[[:space:]]*//'`
}
mdlsFormatUTI(){
echo `mdls -name $1 $2 | cut -d "=" -f 2 | sed 's/,//' | sed 's/)//' | sed 's/(//'`
}
# function defined ended
# Classification according to utiTree start
utiTree=(`mdlsFormatUTI kMDItemContentTypeTree $file`)
for uti in $utiTree
do
_uti=`echo $uti | sed 's/\"//g'`
case $_uti in
public.source-code)
_basePath=${_root}Source-code/
break
;;
public.composite-content)
_basePath=${_root}Documents/
break
;;
public.presentation)
_basePath=${_root}Presentations/
break
;;
public.disk-image)
_basePath=${_root}Disk-images/
break
;;
public.archive)
_basePath=${_root}Archives/
break
;;
public.movie)
_basePath=${_root}Videos/
break
;;
public.audio)
_basePath=${_root}Audios/
break
;;
public.image)
_basePath=${_root}Pictures/
break
;;
public.plain-text)
_basePath=${_root}Documents/
break
;;
public.folder)
_basePath=${_root}Folders/
break
;;
*)
echo other $_uti
_basePath=${_root}Others/
;;
esac
done
# Classification according to utiTree ended
# fix basePath by extension
extension="${fileName##*.}"
echo extension $extension
case $extension in
docx|xlsx)
_basePath=${_root}Documents/
;;
pptx|ppt|key)
_basePath=${_root}Presentations/
;;
archiver|7z|rar|gz)
_basePath=${_root}Archives/
;;
esac
# rename start
kMDItemContentCreationDate=`mdlsFormat kMDItemContentCreationDate $file`
regexp="(^[0-9]{4}\-[0-9]{2}\-)" # check file name
if [[ $fileName =~ $regexp ]]
then
else
creationDatesFormat=`date -j -f " %Y-%m-%d %H:%M:%S %z" "$kMDItemContentCreationDate" +%Y-%m-`
fileName=${creationDatesFormat}$fileName # rename file by adding creationTime
fi
# rename end
# mv to folder start
if [[ $sortByKind == 1 ]]
then
kind=`mdlsFormat kMDItemKind $file`
destination=${_basePath}${kind}
moveTO $file ${destination} ${fileName} # sort to finder by kind
else
moveTO $file $_basePath ${fileName} # move to basePath
fi
# mv to folder end
}
smartMv $1 $_root $_sortIntoSubfolderByKind
谢谢!
请教 mark、subfolder这两个规则是怎么配置的呢?
@on7line 请教 mark、subfolder这两个规则是怎么配置的呢?
脚本内容如下:
file=$1
mdlsFormat(){ # format result for `mdls`
echo `mdls -name $1 $2 | cut -d "=" -f 2 | sed 's/\"//g' | sed -e 's/^[[:space:]]*//'`
}
fileName=`mdlsFormat kMDItemFSName $file`
kMDItemContentCreationDate=`mdlsFormat kMDItemContentCreationDate $file`
regexp="(^[0-9]{4}\-[0-9]{2}\-)" # check file name
if [[ $fileName =~ $regexp ]]
then
else
creationDatesFormat=`date -j -f " %Y-%m-%d %H:%M:%S %z" "$kMDItemContentCreationDate" +%Y-%m-`
fileName=${creationDatesFormat}$fileName
mv $file `dirname $file`/$fileName
fi
感谢,我去试试
shell 脚本里用的mv,会导致同名文件会覆盖。(自动命名后的,同日期同文件名)。
hazel 里的mv其实是有很多选项的。
@unix2dos shell 脚本里用的mv,会导致同名文件会覆盖。(自动命名后的,同日期同文件名)。
hazel 里的mv其实是有很多选项的。
是的,不过和脚本结合起来使用比较麻烦,还是写到一个shell脚本里比较方便维护。之前考虑因为加了时间前缀重名的概率很低,所以就偷懒没增加判断重名的逻辑 😄。
这个方案特别好用,我现在使用keyboard Maestro增加了两个快捷键,一步增加local
或 remote
tag,这样就不用选了。
大佬我问下这个脚本可以用于外接硬盘吗,还是只能用于云盘,如果可以用外接硬盘的话,这个路径怎么配置呢
大佬我问下这个脚本可以用于外接硬盘吗,还是只能用于云盘,如果可以用外接硬盘的话,这个路径怎么配置呢
可以呀,把 _root
换成你硬盘的路径就可以了
_root=~/Library/Mobile\ Documents/com\~apple\~CloudDocs/Marked_iCloud/
@netpi
大佬我问下这个脚本可以用于外接硬盘吗,还是只能用于云盘,如果可以用外接硬盘的话,这个路径怎么配置呢
可以呀,把
_root
换成你硬盘的路径就可以了_root=~/Library/Mobile\ Documents/com\~apple\~CloudDocs/Marked_iCloud/
因为我比较小白,还不是很清楚 我的硬盘名字叫SSD,文件路径应该是Volumes/SSD/Marked_SSD 那在这里 是:_Volumes=~/SSD/Marked_SSD/ 还是:_SSD=~/Marked_SSD/ 我有点晕😵💫
@Evankoo
~
在mac里是用户目录,如果你mac的用户名是 Evankoo
那么~
就代表 /Users/Evankoo
如果你的硬盘绝对路径是 /Volumes/SSD/Marked_SSD
那么_root=/Volumes/SSD/Marked_SSD
@netpi @Evankoo
~
在mac里是用户目录,如果你mac的用户名是Evankoo
那么~
就代表/Users/Evankoo
如果你的硬盘绝对路径是/Volumes/SSD/Marked_SSD
那么_root=/Volumes/SSD/Marked_SSD
搞定了,好像硬盘名称不能有空格。 感谢大佬,这套文件管理流程太牛了,打算好好实际运用
https://eurychen.me/post/solutions-of-macos-file-management/