Grep

在進行文件搜尋時將 ls 變數傳遞給 grep 僅在目錄內有效

  • May 13, 2016

我正在執行一個命令,用於在文件夾中查找最新文件,然後對匹配模式的內容進行 grep。這是顯示我遇到的問題的命令流。

root@backup /]# grep -w 'sucessfully completed.' "$(ls -1rt /var/log/folder | tail -n1)"
/bin/grep: <file_name>: No such file or directory
[root@backup /]# cd /var/log/folder/
[root@backup file_folder]# grep -w 'sucessfully completed.' "$(ls -1rt /var/log/folder | tail -n1)"
sucessfully completed.

在第一個命令中,它找到了文件,但隨後說沒有這樣的文件或目錄。奇怪的。然後,如您所見,我在實際文件夾中執行了相同的命令,並且它起作用了。我的變數具有絕對路徑,所以這裡發生了什麼?我檢查了任何可能干擾的 grep 別名,但沒有發現。如果我在使用變數之外單獨執行命令,它可以工作並且它可以在文件夾之外工作。(正如我所料)

[root@backup /]# grep -w 'sucessfully completed' /var/log/folder/file
sucessfully completed.

第一部分中缺少文件的目錄名,請嘗試

grep -w 'sucessfully completed.' "/var/log/folder/$(ls -1rt /var/log/folder | tail -n1)"

不要嘗試…除非 /var/log/folder/ 中沒有目錄

grep -w 'sucessfully completed.' "$(ls -1rt /var/log/folder/* | tail -n1)"

引用自:https://unix.stackexchange.com/questions/282981