Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 找出我列表中的文件夹是否真的存在于我的文件夹中_Bash - Fatal编程技术网

Bash 找出我列表中的文件夹是否真的存在于我的文件夹中

Bash 找出我列表中的文件夹是否真的存在于我的文件夹中,bash,Bash,我正在试图找出我的磁盘上my list.txt上的文件夹是否真的存在于myFiles中。但我得到的唯一输出是“找不到匹配项”,这是bs,因为我知道其中一些文件夹是真实的。 我相信如果条件有问题,但我不知道是什么 顺便说一句,fileFolder变量必须在引号内,否则我将得到“预期的一元操作” 此命令find myFiles/-name$fileList-printf“%f\n”会切断文件夹的路径,因此我只获取文件夹1,而不是/home/michael/myFiles/folder\u 1 lis

我正在试图找出我的磁盘上my list.txt上的文件夹是否真的存在于myFiles中。但我得到的唯一输出是“找不到匹配项”,这是bs,因为我知道其中一些文件夹是真实的。 我相信如果条件有问题,但我不知道是什么

顺便说一句,fileFolder变量必须在引号内,否则我将得到“预期的一元操作”

此命令
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和文件树,以便用户可以复制