用于读取文件,在文件系统中查找以及移动到目录的脚本

时间:2016-08-03 19:08:54

标签: arrays bash

我对脚本很恐怖,过去两天一直在网站上倾倒,但没有找到解决方案,也没能找到一个解决方案。我在我的智慧结束,需要一些帮助。

我有一个文本文件,其中包含部分名称和数字,我需要在目录及其子目录中找到并移动到单独的目录。

我试过以下但没有运气:

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);

提前致谢。

1 个答案:

答案 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参数更改为以下内容:

  • 如果它们是完整的文件名(例如,值为“filename.txt”的行与名为“filename.txt”的文件匹配),则为-iname "$line"
  • 如果它们是部分文件名(例如,值为“file”的行匹配“file.txt”和“filename.txt”),则为-iname "$line*"
  • 如果它们是没有文件扩展名的完整名称,(例如,值为“file”的行与“file.txt”匹配,而不是“filename.txt”),则-iname "$line\.*"

find命令的解释btw:

  • -type f - 仅限文件(目录为d,软/硬链接为l);
  • -iname - 与-name类似,但不区分大小写;
  • -exec - 为每个匹配文件执行的命令,以\;
  • 结尾
  • mv -t /root/moved {} - -t选项是目标目录,后跟要将文件移动到的目标的路径。源文件参数(即我们正在移动的文件路径)是mv中的最后一个参数,{},表示find -exec命令中的当前文件路径。

请注意,您可能需要使用"$line*",因为我无法判断您的姓名与文本文件有多模糊。如果它们肯定会从头开始匹配(例如,文件中的行与值“somefile”匹配以“somefile。*”格式命名的文件,其中*是任何数量的字符)