有沒有辦法讓 ls 只顯示某些目錄的隱藏檔案?

有沒有辦法讓 ls 只顯示某些目錄的隱藏檔案?

我有一個目錄,無論選擇什麼使用者或選項,我都希望它始終顯示隱藏檔案。

我知道該-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即可。

相關內容