[英]Regex to find the files without .log extension and containing the filename report
[英]How to -find -exec cp files from a list containing a portion of the filename
我已經搜索了很長時間,但找不到有效的答案。 我有一個包含部分文件名的列表(文件名的前幾個字母)。 如果我按如下方式單獨放置文件名,它會起作用:
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 {} +
數組功能需要具有此功能的擴展外殼(Bash、 ksh
等); 它不適用於/bin/sh
。
cp -t
是一個 GNU 擴展; 如果你沒有那個,也許只是使用你原來的-exec cp {} dir \\;
雖然效率會降低。 一些舊版本的find
也不支持-exec ... +
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.