Shell

立即輸入您重命名的最後一個目錄

  • June 12, 2017

我有一個目錄位於/var/www/html. 我將此目錄mvexample1重命名為to to example2

更改名稱時如何輸入新命名的目錄?

您將如何實現這一目標?可能與find, mmin, 0*60?

我的目標是重命名並輸入一個操作,而不是兩個不同的操作。

理想情況下,我的目標是單行解決方案,而不需要在系統中定制任何東西。

您可以將其添加到您的 .bashrc 或 .bash_aliases 文件中(如果您的 shell 不是,則為等效文件bash):

mvcd () {
   mv -- "$1" "$2" &&
     cd -P -- "$2"
}

然後,重新啟動你的 shell,然後你就可以像這樣使用這個函式了:

mvcd foo bar

假設$2它不是一個現有目錄,否則mv會移入 $1 而不是它(請參閱GNU 的選項防止這種情況發生)。-T``mv

--標誌著選項的結束。mv "$1" "$2"將是mv "$option_or_source" "$option_or_argument_to_first_option_or_destination"mv -- "$1" "$2"保證$1and$2不被視為選項,即使它們的名稱以開頭,-所以它總是被視為mv -- "$source" "$destination". 通常,您希望--在命令被賦予任意參數的任何地方使用。

-P(用於物理目錄遍歷)是為了防止cdPOSIX shell 的內置預設情況下對..路徑組件進行特殊處理,以便它處理$2相同的內容mv。沒有它, incdmv foo ../bar可以cdcd 進入與重命名為的bar目錄不同的目錄。mv``foo

如果您已設置$CDPATH(或者它在 shell 啟動時位於環境中),您還需要為該一次cd呼叫禁用它:

mvcd () {
   mv -- "$1" "$2" &&
     CDPATH= cd -P -- "$2"
}

一些額外的極端情況問題仍然存在:(-並且在某些 shell-2中,+3)甚至在--. 如果要重命名foo-,請使用mvcd foo ./-代替mvcd foo -

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