再入力せずにファイル名にプレフィックス/サフィックスを追加しますか?

再入力せずにファイル名にプレフィックス/サフィックスを追加しますか?

次のようなことをしたい

$ tmp=name*
$ mv $tmp new_$tmp
$ ls new_*
$ new_name-with-stuff-i-dont-want-to-type name-with-stuff-i-dont-want-to-type

環境変数の設定が機能しているようです。

$ $tmp
$ name-with-stuff-i-dont-want-to-type

しかし、私がする時ではありません。mv

$ mv $tmp new_$tmp
$ ls new_*
$ new_name*

Q:タイピング時間を節約するための賢くて簡単な方法はありますか?

答え1

私はいつもbash拡張が好きでした。

ls
name-with-stuff-i-dont-want-to-type

mv name-with-stuff-i-dont-want-to-type{,_old}

ls
name-with-stuff-i-dont-want-to-type_old

これは次のとおりです。

mv name-with-stuff-i-dont-want-to-type name-with-stuff-i-dont-want-to-type_old

プレフィックス:

ls
name-with-stuff-i-dont-want-to-type

mv {,new_}name-with-stuff-i-dont-want-to-type

ls
new_name-with-stuff-i-dont-want-to-type

ファイル名を簡単に変更するには:

ls
fileFOOname

mv file{FOO,BAR}name

ls
fileBARname

答え2

の場合、zsh通常は以下を使用しますzmv

autoload zmv # in ~/.zshrc
zmv 'name*' 'tmp_$f'

答え3

複数のファイルが一致するname*場合は、$tmpその名前をすべてスペースで区切って含めます。代わりに、それを$tmp配列として扱い、その中の各要素に対して操作を実行します。

for file in $tmp; do 
    mv "$file" "new_$file"
done

スペースを含む名前が複数の名前に分割されないようにするには、二重引用符を使用してください。

関連情報