我每天都要拍几百张屏幕截图,但我总是忘记删除它们。它们最终占用了我机器上的大量内存,有时我不能只是批量突出显示和删除,因为我担心会删除我真正需要的重要图片和视频。
开始之前
我想先说一下,这个教程在很大程度上取决于我对Warp AI的使用,它基本上是一个内置于终端的ChatGPT集成,可以快速生成任何问题的答案/代码片断。
在下一节,我将把提示(我问Warp AI的内容)和Warp AI的输出是什么。我基本上只是按照这些指示在5分钟内写完了我的脚本。
我的过程总结
所以我写这个脚本的过程就是:
- 询问Warp AI如何做某事。
- 复制它给我的输出(代码块+运行的命令)。
- 检查它是否有效。
- 向Warp AI询问任何错误/让它调整其输出。
在下面的部分,我将包括我与Warp AI互动的全部记录,因为我正在构建我的脚本。这大概花了我不到5分钟的时间。如果你不想阅读整个记录,这里有一个总结。
-
问Warp AI如何写一个脚本,删除我的Documents目录中的所有屏幕截图。
-
复制输出,但意识到它寻找的所有东西都被命名为 "screenshots.png",而我的屏幕截图被命名为 "Screen Shot XYZ.png"
-
要求Warp AI调整其输出,以寻找 "屏幕截图 "这一短语,并且不区分大小写。
-
获得基本功能,然后通过让脚本打印出它所删除的文件的名称来改进它。
-
要求Warp AI解释一些输出,这样我就可以理解我的脚本在做什么,并在这个过程中学习。
Warp AI的文字记录 (OK To Skip to Conclusion)
提示:给我写一个脚本,删除我的文档目录中的所有屏幕截图。
Warp AI: 当然!这是一个可以删除你文档目录中所有截图的脚本:
#!/bin/bash
cd ~/Documents
rm -f *screenshot*.png
进入全屏模式 退出全屏模式
把这个脚本保存为一个扩展名为.sh
的文件(例如:delete_screenshots.sh
),然后用下面的命令使其可以执行:
chmod +x delete_screenshots.sh
进入全屏模式 退出全屏模式
然后,你可以用下面的命令在终端运行这个脚本:
./delete_screenshots.sh
进入全屏模式 退出全屏模式
这将改变你的文档目录,并删除所有文件名中带有 "screenshot "和".png "扩展名的文件。运行这个脚本时要小心,因为它将永久地删除这些文件而不提示确认。
提示:我是否必须在每次编辑.sh文件时运行chmod +x命令?
经纬网AI:不,你不必每次编辑.sh
文件时都运行chmod +x
命令。chmod +x
命令只需要运行一次就可以使脚本执行。
但是,如果你对脚本进行了修改并保存了文件,你就需要再次运行该脚本以看到修改后的效果。如果你已经用chmod +x
使脚本可执行,你可以简单地用./script_name.sh
再次运行该脚本,以执行该脚本的更新版本。
如果你对脚本进行了修改,并且想看看修改后的效果,而不需要再次运行chmod +x
命令,你可以使用下面的命令在当前的shell会话中重新加载脚本:
source script_name.sh
进入全屏模式 退出全屏模式
这将重新加载脚本,并应用你对它所做的任何修改,而不要求你再次使脚本可执行。
提示:你能不能编辑上面的脚本,删除任何文件名包括 "Screen Shot "并且不区分大小写的文件?
Warp AI: 可以,这里有一个更新的脚本,可以删除你的文档目录中所有文件名中含有 "Screen Shot "的文件(不区分大小写):
#!/bin/bash
cd ~/Documents
shopt -s nocaseglob
rm -f *Screen\\ Shot*
进入全屏模式 退出全屏模式
shopt -s nocaseglob
命令启用了不区分大小写的globbing,这意味着*Screen\\ Shot*
模式将匹配文件名中带有 "Screen Shot "的任何大小写字母组合。
把这个脚本保存为以.sh
为扩展名的文件(如delete_screen_shots.sh
),然后用下面的命令使其可执行:
chmod +x delete_screen_shots.sh
进入全屏模式 退出全屏模式
然后,你可以用下面的命令在终端运行这个脚本:
./delete_screen_shots.sh
进入全屏模式 退出全屏模式
这将改变到你的文档目录,并删除所有文件名中带有 "Screen Shot "的文件(不区分大小写)。运行这个脚本时要小心,因为它将永久性地删除这些文件而不提示确认。
提示:你能不能编辑上面这个脚本,以输出它所删除的所有屏幕截图的名称,每个都在它们自己的行上?
Warp AI: 可以,这里有一个更新的脚本,它将删除你的文档目录中所有文件名中带有 "Screen Shot "的文件(不区分大小写),并输出被删除文件的名称:
#!/bin/bash
cd ~/Documents
shopt -s nocaseglob
deleted_files=(*Screen\\ Shot*)
rm -f "${deleted_files[@]}"
printf "Deleted files:\\n%s\\n" "${deleted_files[@]}"
进入全屏模式 退出全屏模式
deleted_files=(*Screen\\ Shot*)
行创建了一个所有文件名中带有 "Screen Shot "的数组(不区分大小写),rm -f "${deleted_files[@]}"
行删除了所有这些文件。最后,printf
命令输出被删除文件的名称。
把这个脚本保存为以.sh
为扩展名的文件(例如:delete_screen_shots.sh
),然后用以下命令使其可执行:
chmod +x delete_screen_shots.sh
进入全屏模式 退出全屏模式
然后,你可以用下面的命令在终端运行这个脚本:
./delete_screen_shots.sh
进入全屏模式 退出全屏模式
这将切换到你的文档目录,删除所有文件名中带有 "Screen Shot "的文件(不区分大小写),并输出被删除文件的名称。运行这个脚本时要小心,因为它将永久性地删除这些文件而不提示确认。
提示:What does the \n%s\n do?
经纬网AI:printf
命令中的\\n
字符是转义序列,代表换行符,它使输出的格式化,每个被删除的文件名都在单独一行。
printf
命令中的%s
格式指定符是一个字符串值的占位符,它被deleted_files
数组的值所取代。在数组名称后面的@
符号告诉printf
,将数组扩展为单独的参数,数组中的每个元素都被视为单独的字符串值。
因此,带有%s
指定符和@
符号的printf
命令将deleted_files
数组扩展为独立的字符串参数,然后将这些参数打印在不同的行上,每个字符串前后都有一个换行符。
结论
最后,我现在有了一个可以工作的脚本,我可以很容易地从命令行中运行。
太疯狂了,我可以在不了解CLI脚本的情况下轻松地编写bash脚本。