我有一個目錄,無論選擇什麼使用者或選項,我都希望它始終顯示隱藏檔案。
我知道該-a
選項會顯示隱藏檔案。我只是想自動做出使用該選項的決定。
假設我在 /home/user 中,我不關心看到隱藏文件,但如果我在 /filestopprocess 中,我想查看隱藏文件。
這種類型的功能存在嗎?
答案1
我能想到的最簡單的方法是建立一個映射到函數的 shell 別名。假設我們正在使用 bash 並將以下別名添加到您的.bashrc
:
alias ls=ls_mod
現在,新增ls_mod
以下函數:
ls_mod () {
DIRS_TO_SHOW_HIDDEN=(dir1 dir2 dir3)
for DIR in "$@"; do
for CHECK in "${DIRS_TO_SHOW_HIDDEN[@]}"; do
if [ "$(realpath "$DIR")" == "$CHECK" ]; then
ls -a "$DIR"
else
ls "$DIR"
fi
done
done
}
我還沒有測試過這個,所以我懷疑它是否完美,但至少它給了你這個想法。您可能需要努力將額外的參數傳遞給ls
.
答案2
為了充實我對 John Moon 答案的評論,這裡有一個函數,如果路徑與某個列表匹配,它會包裝ls
並添加一個標誌:-a
function ls() {
# if no arguments are provided, the current directory is assumed
[ "$#" -eq 0 ] && set .
case "$(realpath "$1")" in
(/path/to/jason/filestoprocess*|\
/path/to/jason/otherfilestoprocess*)
set -- -a "$1" ;;
esac
command ls "$@"
}
函數的第一部分檢查是否ls
正在完成裸露操作;在本例中,我們將.
(目前目錄)設定為參數#1;否則,我們假設(給定的)第一個參數是列表的路徑。
如果設定或給定的路徑與列出的模式相符(此處為 ...filestoprocess 或 ...otherfilestoprocess ),則我們set
再次使用將標誌新增-a
至參數。最後,我們使用我們安排的參數來command
呼叫實際的命令。ls
謝謝穆魯指出set
簡化!
要新增更多路徑,只需繼續模式,用管道(|)
字元分隔它們即可。我使用反斜線轉義字元將兩個現有模式分成單獨的行,\
以使它們更易於閱讀。
如果您已經ls
為某些內容添加了別名,則該別名將優先,並且需要將其刪除才能使該函數正常工作(否則,別名添加的任何標誌都將傳遞給該函數並最終出現在 中$1
)。如果您希望ls
預設使用某些標誌,只需將它們新增至兩個對應的呼叫command ls
即可。