回答:
あなたのシェルがいる場合、サポート ブレース展開を(と連携しcsh、tcsh、ksh、zsh、bash、mksh、lksh、pdksh、yashとブレース-拡大呼び出すことによって有効yash --brace-expandかと対話型のシェルで設定set -o brace-expand、またはfish):
mv ~/folder/subfolder/file.{txt,sh}
rename。
renameため、より良い解決策とは思いrenameません。
rename(util-linuxパッケージの一部)を使用することもできます。
rename .txt .sh ~/folder/subfolder/file.txt
{a,b}機能に依存するよりもはるかに優れた方法です。
rename、perlベースのまったく異なるプログラムです。そこでは、を使用しますrename 's/txt$/sh/' ~/folder/subfolder/file.txt。
mmv。
上記はすべて良いです。これも動作します:
( cd ~/folder/subfolder && mv file.txt file.sh )
sudo部品を取り外しても機能します。
sudoですか?
sudo解釈さ~れるためです。
sudo、できmvませんcd。CDを内蔵シェルである理由を参照してください。そして、あなたがすることはできません。sudo(
いいえ。ファイル名を変更するには、ファイルへのフルパスを指定する必要があります。唯一の選択肢は、実行する前にターゲットフォルダに移動することmvです:
cd ~/folder/subfolder/
mv file.txt file.sh
または、ターゲットディレクトリのファイルの名前を変更する小さな関数を作成することもできます。たとえば、次の行をシェル初期化ファイルに追加します(~/.bashrc使用している場合bash):
lmv(){
_path=$(dirname -- "$1")
_target="${_path%/}/$2"
mv -- "$1" "$_target"
}
次に、新しいターミナルを開くか、単に実行source ~/.bashrcしてinitファイルを再読み取りします。
lmv ~/folder/subfolder/file.txt file.sh
lmv()機能の場合は+1 。私はそれを知りませんでした:)
cuonglmの答えの有用性を拡張するだけで(私は彼の解決策が好きなので、信用を得ることはありません)、彼の答えは正しいものです。
ユースケースは、/ folder / subfolder / configFile.dat TO configFile.dat.origのように、しばしばリモートの場所にファイルをmvしたいということです(実際の問題)。
この形式のコマンドは、ファイル拡張子を追加します(元の拡張子を置き換えません)
mv ~/folder/subfolder/file.txt{,.orig}
説明:「{、.orig}」は、ファイル名の末尾の(なし)を(何か)「.orig」に置き換えることを意味します
または、ファイル拡張子を削除します(名前変更を元に戻します)
mv ~/folder/subfolder/file.txt{.orig,}
注:「dirパスを再入力せずにファイルの名前を変更する最も簡単な方法」のトピックは引き続き
はい。使用する場合は、使用bashしますsudo pushd ~/folder/subfolder/ && sudo mv ./file.txt ./file.sh && popd。
これは実際にはもっと大きく、元のディレクトリへのアクセス許可を失った場合に失敗する可能性がありpopdます。
pushdとpopdここでは?これはどのように優れていcd ~/folder/subfolder/ && sudo mv file.txt file.shますか?
pushd popdは、を使用cdして戻ることcd -です。
popdは、よりも優れていcd ../../ます。
(cd /path/to/there && mv x y)その後使用(サブシェルを使用)
sudo前に置くべきではありませんpushd。したがって、完全なコマンドはである必要がありますpushd ...dir && sudo mv old new && popd。別の方法として、(cd ...dir; sudo mv old new)サブシェルで実行するとディレクトリの変更が自動的に処理されるので、実行できます。