問題應(yīng)該算挺常見的但是一句話還挺難說清楚,所以百度特別難搜。
場景就是,有一堆以員工名稱命名的文件(名稱可能還有字母數(shù)字等前后綴),現(xiàn)在給定一個員工清單,需要從這些文件中篩選出員工清單上列出的員工的文件,并復(fù)制到另外一個目錄中。
輸入:
1. 許多文件名包含員工名稱的文件
2.一個清單文件,里面包含需要篩選的員工列表,每個員工名稱一行
輸出:
1.在清單上的員工的文件
?
研究了一下,需要綜合使用awk、find、cp命令
awk用于逐行的處理清單文件,find用于文件名匹配,cp命令用于文件復(fù)制
命令如下:
awk -F '/' '{print "*"$NF"*"}' name.txt | sort | uniq | xargs -i find . -name {} | xargs cp -t ./output
print命令用于把輸出要匹配的文件名打印到管道中,使用"*"來拼接字符串來模糊匹配
?
因為是在Windows中用cygwin模擬的,源文件都是Windows里面的文件,所以在處理的過程中遇到了一些兼容問題,比如:
1. 源文件name.txt的編碼和特殊符號的問題,Windows默認文本文件保存為GB2312編碼,在Linux環(huán)境中處理后變成亂碼,修改為UTF-8后問題解決。Windows默認的換行符是CRLF,Linux默認的換行符是LF,Windows格式在處理的時候后綴的*號無法正常拼接,換成Linux的換行符后問題解決。文章來源:http://www.zghlxwxcb.cn/news/detail-499612.html
2. 上面的命令復(fù)制出的文件默認沒有權(quán)限,在Windows中打不開,使用chmod命令修改后問題解決。文章來源地址http://www.zghlxwxcb.cn/news/detail-499612.html
到了這里,關(guān)于Linux從文件中逐行讀取文件名并將匹配的文件復(fù)制到指定目錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!