回答:
あなたのシェルがいる場合、サポート ブレース展開を(と連携し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)
サブシェルで実行するとディレクトリの変更が自動的に処理されるので、実行できます。