gpt4 book ai didi

regex - 如何从包含文件名一部分的列表中 -find -exec cp 文件

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:45 25 4
gpt4 key购买 nike

我已经搜索了很长时间,但找不到有效的答案。我有一个包含部分文件名的列表(文件名的前几个字母)。如果我按如下方式单独放置文件名,则它可以工作:

find ~/directory/to/search -name "filename*" -print -exec cp '{}' ~/directory/to/copyto \;

如果我尝试在这种情况下包含该列表,它不会:

cat ~/directory/List.txt | while read line 
do
echo "Text read from file - $line"
find ~/directory/to/search -name "$line*" -type f
done

这也不是:

cat ~/directory/List.txt | while read line 
do
echo "Text read from file - $line"
find ~/directory/to/search -name "$line&*" -type f
done

最后,我想补充一点:

-exec cp '{}' ~/directory/to/copy/to \;

并复制所有符合查找条件的文件。

我尝试过使用 grep 但文件很大,所以需要很长时间。我尝试使用 find、xargs、cp、grep 和 regex 的各种组合(如之前搜索中所述),但没有成功。

编写带有一堆 if then 语句的长脚本是唯一的解决方案吗?我一直在使用 Linux,但如果在 mac 上使用它会很酷。

最佳答案

这是一次粗略的尝试,试图通过一次 find 调用来摆脱困境。

predicates=()
or=''
while read -r line; do
predicates+=($or -name "$line*")
or="-o"
done < ~/directory/list.txt
find ~/directory/to/search -type f \( "${predicates[@]}" \) \
-exec cp -t ~/directory/to/copy/to {} +

数组功能需要具有此功能的扩展 shell(Bash、ksh 等);它不适用于 /bin/sh

cp -t 是一个 GNU 扩展;如果您没有,也许只需使用原来的 -exec cp {} dir\; 虽然效率较低。某些旧版本的 find 也不支持 -exec ... +

关于regex - 如何从包含文件名一部分的列表中 -find -exec cp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51853222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com