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,是的,它可能不是最有效的解决方案,但仍然是一个选项。