Bash 找出我列表中的文件夹是否真的存在于我的文件夹中
我正在试图找出我的磁盘上my list.txt上的文件夹是否真的存在于myFiles中。但我得到的唯一输出是“找不到匹配项”,这是bs,因为我知道其中一些文件夹是真实的。 我相信如果条件有问题,但我不知道是什么 顺便说一句,fileFolder变量必须在引号内,否则我将得到“预期的一元操作” 此命令Bash 找出我列表中的文件夹是否真的存在于我的文件夹中,bash,Bash,我正在试图找出我的磁盘上my list.txt上的文件夹是否真的存在于myFiles中。但我得到的唯一输出是“找不到匹配项”,这是bs,因为我知道其中一些文件夹是真实的。 我相信如果条件有问题,但我不知道是什么 顺便说一句,fileFolder变量必须在引号内,否则我将得到“预期的一元操作” 此命令find myFiles/-name$fileList-printf“%f\n”会切断文件夹的路径,因此我只获取文件夹1,而不是/home/michael/myFiles/folder\u 1 lis
find myFiles/-name$fileList-printf“%f\n”
会切断文件夹的路径,因此我只获取文件夹1,而不是/home/michael/myFiles/folder\u 1
list.txt的内容:
文件夹1文件夹2文件夹3文件夹4
myFiles文件夹的内容:
文件夹1文件夹3文件夹5文件夹6
无论如何,谢谢你的回答和时间
#!/bin/bash
for i in $(cat list.txt);do
fileList=`echo $i`
fileFolder=`find myFiles/ -name $fileList -printf '%f\n'`
if [ $fileList == "$fileFolder" ]; then
echo "Found match $fileFolder"
else
echo "No match found"
fi
done
更新:我忘了提到我正在用Win10在Ubuntu上运行这个脚本。所以我在虚拟机上测试了我的脚本,它运行得很好:)但我需要它在Win10下运行的Ubuntu上运行:/
更新2:我用bash-x运行我的scrip,这是我得到的示例
++ cat list.txt
+ for i in $(cat list.txt)
++ echo $'Folder_1\r'
+ fileList=$'Folder_1\r'
+ echo $'Folder_1\r'
Folder_1
++ find myFiles/ -name $'Folder_1\r' -printf '%f\n'
+ fileFolder=
+ '[' $'Folder_1\r' == '' ']'
+ echo 'No match found'
No match found
我认为这就是问题所在:fileList=$“Folder\u 1\r”。不应该有此部件->\r
解决方法:我下载了dos2unix,并在命令行中运行了dos2unix list.txt。剧本终于成功了。谢谢大家! 这里有一个可供选择的脚本,它不使用
cat
和for循环
,而是在读取循环时使用
#/usr/bin/env bash
##:循环查找的输出
而IFS=read-ru 5-d''目录;做
而IFS=$'\r\t\n'读取-r列表;do##:循环查看list.txt的输出
如果[[$directories=*“$list”]];然后###:如果两者都匹配
printf'找到的匹配目录%s是%s中的%s\n'$directories”“$list”list.xt##:打印匹配的消息
fi
完成 每个OP输入5次,文件中有窗口行结尾。
在Linux上运行dos2unix或在Linux上使用vi/exacts重新创建文件可以解决此问题。不要读取带有for的行。对两者都使用while read循环或使用arrayOuch!你的意思是在读取文件列表时;如果[-d“$fileList”],则执行此操作;然后回显“$fileList exists”;else echo“$fileList不存在”;fi;完成
?是的,但我认为OP希望将文件内容与find的输出相匹配。是的,我不清楚这一点。希望OP能澄清。find
命令在它所在的位置很笨拙——这就是促使实际测试dir的原因。可能是您在输入文件(list.txt)、前导/尾随空格等中有输入错误。请尝试使用“bash-x”运行脚本。考虑共享List.txt和文件树,以便用户可以复制