linux下根据已有文本内所排列的文件名查找文件

2025-05-16 21:00:43
推荐回答(2个)
回答(1):

操作前提:
所缺文件的文件名排列在文件file.txt中,且每两个所缺文件是用空格、制表符或者换行分隔。
所缺文件在路径/home中。
操作命令:
for ITEM in `cat file.txt`;do find /home/ -name ${ITEM} -type f >> a.log; done
命令解释:
ITEM为声明的变量,代表file.txt的每个文件名。
执行find搜索命令,在/home/中查找,若所缺文件保存在其他路径,或者保存在多个路径下,则将/home/变更为/,但是这样搜索起来会很慢。
>> a.log 表示将结果输出到a.log中。如果删除,则会输出到屏幕上。考虑到你要查找1万条,还是输出到文件中比较好。
输出的结果是:/home/xxxxx

例外:
如果file.txt不是用空格分隔的,而是用其他符号,如【|】或【,】分隔,请提出追问,可以通过其他方法来改变file.txt。

其他:
如上命令也可以写成脚本:
1、创建脚本
cat > find_file.sh
2、将如下内容拷贝进去
#!/bin/sh
for ITEM in `cat file`
do
find /home/ -name ${ITEM} -type f >> a.log
done
回车后,使用CTRL+C,退出
3、使用sh find_file.sh即可执行

回答(2):

举例:如果这个一万多个文件名是每个占一行的话,那么就应该有一万多行。举例可以用下面这个脚本来实现:
#!/bin/bash
for i in {1..10000};do #比如有10000个
x=`sed -n "$i p" 123.txt` #举例文件名为123.txt
echo "finding file $x ............." #打印查找项
find / -name "$x" #在根目录下顺序查找每一个文件名
done
希望对你有帮助