如何在不顯示“/”的情況下查找文件
我是初學者,我不知道腳本 shell Linux 的語法。
我必須只顯示已經完成的以 (.sh) 結尾的文件。
但是當我使用 cut 時,這些以 (.sh) 結尾的文件的名稱必須不顯示“.sh”和“./”
我拿走了兩點之間的一切
範例:./hello.sh
輸出:/你好
像這樣使用 find/cut 會破壞子目錄中的任何文件。在目前目錄中,嘗試
ls | cut -d"." -f1
,或者如果有子目錄,嘗試find * -name "*.sh" | sed "s/.sh$//"
有了新的查找,它
*
會擴展到目前目錄中的所有條目,所以它可能是(例如find file1.sh dir1 dir2 -name "*.sh"
。通過 sed 的管道,只是去掉了結尾。
假設您要顯示與
*.sh
目前目錄中的模式匹配的名稱,不帶.sh
後綴:for name in ./*.sh; do basename "$name" .sh done
該
basename
實用程序輸出作為第一個參數給出的路徑名的文件名部分,如果給出第二個參數,則從名稱的末尾剝離該字元串。上述循環不考慮隱藏名稱。如果您需要遞歸地執行此操作,那麼您可以
find
像這樣使用:find . -name '*.sh' -exec basename {} .sh \;
這會呼叫
basename
每個找到的路徑名並sh
從每個路徑名中刪除文件名後綴。如果您使用的是
bash
shell,您也可以這樣做:shopt -s nullglob dotglob shopt -s globstar for name in ./**/*.sh; do basename "$name" .sh done
這設置了一些 shell 選項,以便能夠找到隱藏的名稱 ( ),如果沒有匹配項 ( ),則完全
dotglob
避免循環,並且能夠使用通配模式 ( ; 匹配“遞歸”)。nullglob``**``globstar
使用
zsh
外殼,您將獲得類似的效果print -rC1 -- ./**/*.sh(DN:r:t)
… where the
D
andN
in the globbing qualifier at the globbing pattern end of the globbing qualifiers in the globbing pattern end has the same effect asdotglob
andnullglob
in thebash
shell, and where:r
remove the filename suffix from the filename (r
~ “root”, ie the root of the name with no後綴)並:t
刪除路徑名的目錄部分(t
~“tail”,即路徑名的尾部)。要按降序(按名稱)對名稱進行排序,請在
zsh
shell 中使用print -rC1 -- ./**/*.sh(DNOn:r:t)
…其中添加的
On
意思是“按名稱倒序排列”。
bash
在頂部對循環的輸出進行排序是通過輸出傳遞的問題sort -r
:for name in ./*.sh; do basename "$name" .sh done | sort -r
同樣使用
find
命令:find . -name '*.sh' -exec basename {} .sh \; | sort -r
但是請注意,如果任何文件名包含嵌入的換行符,這會給您帶來奇怪的結果。