文件夹结构图:
我对高级 shell 命令和脚本非常陌生。我有基本的终端知识,但以前从未尝试过创建这样的自动化。纯粹的新手。
我在这篇文章中简化了我的目标,但实际项目将涉及几千个文件夹。
基本上我有一个源文件夹和目标文件夹。Source 文件夹包含前缀为“Car”的目录,后跟“三个数字”
我在源文件夹中有一个名为 list.txt 的文本文件,它是每行“三个数字”的列表。
我想编写一个命令或脚本来查找目录并读取列表。如果目录名称中的最后三位数字与列表中的三位数字匹配。我想将匹配的文件夹移动到目标文件夹。
我已经使用 find、-exec mv、xargs、“while IFS read”阅读了各种方法,但我真的不知道解决此问题的最佳方法。我刚刚开始,希望这个论坛上有人能插话而不是殴打我。
Destination
在和的父目录中运行的脚本Source
(.
在您的图片中):该脚本
Source/list.txt
逐行读取。对于每一行,$l
它都会尝试将名为 的目录移动Source/Car$l
到Destination/.
。中的点路径名组件
Destination/.
是一个技巧,以防Destination
不存在。如果Destination
不存在,则第一个mv "Source/Car…/" Destination/
将重命名Source/Car…/
为,Destination/
而不是将其放入其中Destination/
。点有区别:如果目标存在Destination/.
且不Destination/
存在,那么我们的mv
命令将退出并出现错误。该脚本很愚蠢,它不会对其读取的内容执行任何健全性检查
Source/list.txt
。例如,如果一行是001/../../../../../../../../../../home/roco/.ssh
,那么脚本可能会将您的~/.ssh/
目录移动到Destination/
. 如果有空行,则脚本将尝试移动Source/Car/
。如果最后一行不完整,那么它将无法到达mv
(请参阅为什么此while
循环无法识别最后一行?)。