String Bash:将字母数字字符串与小写和大写进行比较

String Bash:将字母数字字符串与小写和大写进行比较,string,bash,String,Bash,给定包含字母数字名称文件的目录: file45369985.xml file45793220.xml file0005461x.xml 另外,给定一个包含文件列表的csv表 file45369985.xml,file,45369985,.xml,https://www.tib.eu/de/suchen/id/FILE:45369985/Understanding-terrorism-challenges-perspectives?cHash=16d713678274dd2aa205fc07b2

给定包含字母数字名称文件的目录:

file45369985.xml
file45793220.xml
file0005461x.xml
另外,给定一个包含文件列表的csv表

file45369985.xml,file,45369985,.xml,https://www.tib.eu/de/suchen/id/FILE:45369985/Understanding-terrorism-challenges-perspectives?cHash=16d713678274dd2aa205fc07b2fc5b86
file0005461X.xml,file,0005461X,.xml,https://www.tib.eu/de/suchen/id/FILE:0005461X/The-reality-of-social-construction?cHash=5d8152fbbfae77357c1ec6f443f8c8a4
我想将csv表中的所有文件与目录的内容相匹配,并将它们移动到其他地方。但是,我无法在此命令中关闭区分大小写:

while read p; do
        data_set=$(echo "$p" | cut -f1 -d",")

        # do something else
done
如何才能正确匹配“X文件”

awk -F [,\.] '{ print substr($1,1,length($1)-1)toupper(substr($1,length($1)))"."$2;print substr($1,1,length($1)-1)tolower(substr($1,length($1)))"."$2 }' csvfile | while read line
do
    find /path -name "$line" -exec mv '{}' /newpath \;
done
使用awk并将文件分隔符设置为。并且,获取每一行并生成文件名的大写和小写X版本

循环此输出并在给定路径中查找文件。如果文件存在,则执行move命令到给定路径

使用awk并将文件分隔符设置为。并且,获取每一行并生成文件名的大写和小写X版本


循环此输出并在给定路径中查找文件。如果文件存在,请将move命令执行到给定路径。

您可以使用
grep-i
进行不区分大小写的匹配:

读取p时
;做
数据集=$(回显“$p”|切割-f1-d“,”)
匹配=$(ls$your|dir | grep-i“^$data_set\$”)
如果[!-z匹配];然后
mv“$match”$另一个目录
fi
完成

您可以使用
grep-i
进行不区分大小写的匹配:

读取p时
;做
数据集=$(回显“$p”|切割-f1-d“,”)
匹配=$(ls$your|dir | grep-i“^$data_set\$”)
如果[!-z匹配];然后
mv“$match”$另一个目录
fi
完成

您可以使用
join
在CSV和文件列表之间执行内部连接:

join  -i -t, \
      <(sort -t, -k1 list.csv) \
      <(find given_dir -maxdepth 1 -mindepth 1 -type f -printf "%f\n" | sort) \
      -o "2.1"
join-i-t\

您可以使用
join
在CSV和文件列表之间执行内部联接:

join  -i -t, \
      <(sort -t, -k1 list.csv) \
      <(find given_dir -maxdepth 1 -mindepth 1 -type f -printf "%f\n" | sort) \
      -o "2.1"
join-i-t\

给定csv文件的格式(第一个字段周围没有引号),我将显示不带换行符的文件名的答案

列出当前目录中的所有文件

find . -maxdepth 1 -type f -printf "%f\n"
在该列表中查找一个文件名(忽略大小写)

假设输出是一个文件

<(cut -d"," -f1 csvfile)
转到/tmp

grep -Fixf <(cut -d"," -f1 csvfile) <(find . -maxdepth 1 -type f -printf "%f\n") |
  xargs -i{} mv "{}" /tmp

grep-Fixf给定csv文件的格式(第一个字段周围没有引号),我将给出不带换行符的文件名的答案

列出当前目录中的所有文件

find . -maxdepth 1 -type f -printf "%f\n"
在该列表中查找一个文件名(忽略大小写)

假设输出是一个文件

<(cut -d"," -f1 csvfile)
转到/tmp

grep -Fixf <(cut -d"," -f1 csvfile) <(find . -maxdepth 1 -type f -printf "%f\n") |
  xargs -i{} mv "{}" /tmp

grep-Fixf csv表中还有其他内容吗?的确,尽管有点凌乱。这是第一行:file886363578.xml,file,886363578.xml,@Yahalnaut,断开的链接?另外,请在问题正文中直接添加csv表格的最小和相关样本。您需要发布正确格式的csv准确样本。否则很难帮上忙。csv表中还有其他内容吗?的确,尽管有点凌乱。这是第一行:file886363578.xml,file,886363578.xml,@Yahalnaut,断开的链接?另外,请在问题正文中直接添加csv表格的最小和相关样本。您需要发布正确格式的csv准确样本。否则将很难提供帮助。您正在将文件移动到其根目录,而不是“其他地方”。另外,您确定案例仅在“X”上有所不同吗?最后,也是作为旁注,此解决方案为每个CSV条目调用
find
。。。也许有更有效的解决方案。root和exec的路径都是一个疏忽。应该只处理Xs,是的,它可能不是最有效的解决方案,但仍然是一个选项。您正在将文件移动到其根目录,而不是“其他地方”。另外,您确定案例仅在“X”上有所不同吗?最后,也是作为旁注,此解决方案为每个CSV条目调用
find
。。。也许有更有效的解决方案。root和exec的路径都是一个疏忽。应该只处理Xs,是的,它可能不是最有效的解决方案,但仍然是一个选项。