[英]ls in a directory for a list of files
我有一個C代碼庫,所有代碼都位於同一目錄中。 我想查找具有相同名稱的代碼文件的所有頭文件。
現在,我有以下命令:
ls *.h | sed s/.h/.c/
這將返回我要搜索的文件名的“列表”。 如何將此列表傳遞給另一個命令,以便可以看到哪些頭文件的代碼文件具有相同的名稱?
沒有任何外部命令:
$ for i in *.h
> do
> [ -f ${i/.h/.c} ] && echo $i
> done
第一行循環遍歷每個文件。
第三行是測試構造。 要test
的-f
標志(又名man [
)檢查文件是否存在。 如果是這樣,它將返回0
(在shell中被視為true)。 如果前一行成功返回,則&&
僅在以下命令有效時運行。
$ {i / .h / .c}是就地內嵌式正則表達式替換,因此測試的文件是.h對應的.c。
您可以使用xargs來轉換其輸入:
a
b
c
到參數列表:
a b c
因此,應打印“ abc”:
echo -e "a\nb\nc" | xargs echo
ls `ls *.h|sed s/.h/.c/` 2>/dev/null
應該可以
ls *.h | sed s/.h/.c/ | xargs ls 2>/dev/null
命令的其余部分使用新的* .c文件名再次運行ls
。 ls
會抱怨每個不存在的文件,因此我們將stderr重定向到無處。
沒有2>/dev/null
示例:
$ ls
a.c a.h b.c c.c d.h
$ ls *.h | sed s/.h/.c/ | xargs ls
ls: d.c: No such file or directory
a.c
ls -1 *.c* *.h*|awk -F. '{a[$1]++}END{for(i in a){if(a[i]==2)print i".hh"} }'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.