我对脚本很恐怖,过去两天一直在网站上倾倒,但没有找到解决方案,也没能找到一个解决方案。我在我的智慧结束,需要一些帮助。
我有一个文本文件,其中包含部分名称和数字,我需要在目录及其子目录中找到并移动到单独的目录。
我试过以下但没有运气:
CREATE TABLE Dept OF Dept_t(dno PRIMARY KEY);
CREATE TABLE Proj OF Proj_t(pno PRIMARY KEY);
CREATE TABLE Emp OF Emp_t(eno PRIMARY KEY);
ALTER TABLE Dept MODIFY (mgr REFERENCES Emp);
提前致谢。
答案 0 :(得分:0)
如果通过部分文件名,您的意思是他们在每个文件名中都有匹配的内容,您可以这样做:
find . -name "foo*"
如果它还依赖于目录(即路径中的任何父文件夹),请使用-regex
选项标志,它将匹配整个文件路径而不是文件名:< / p>
find . -regex '.*/foo/[^/]*.doc'
所以:
while read -r line; do
find . -name "$line"
done < "$1"
根据评论编辑:
while read -r line; do
find "/data/Match" -type f -iname "$line\.*" -exec mv -t /root/moved {} \;
done < "$1"
您可能需要将-iname
参数更改为以下内容:
-iname "$line"
。-iname "$line*"
。-iname "$line\.*"
对find
命令的解释btw:
-type f
- 仅限文件(目录为d
,软/硬链接为l
); -iname
- 与-name
类似,但不区分大小写; -exec
- 为每个匹配文件执行的命令,以\;
mv -t /root/moved {}
- -t
选项是目标目录,后跟要将文件移动到的目标的路径。源文件参数(即我们正在移动的文件路径)是mv
中的最后一个参数,{}
,表示find -exec
命令中的当前文件路径。 请注意,您可能需要使用"$line*"
,因为我无法判断您的姓名与文本文件有多模糊。如果它们肯定会从头开始匹配(例如,文件中的行与值“somefile”仅匹配以“somefile。*”格式命名的文件,其中*是任何数量的字符)