ファイルを新しい名前にコピーする - 最短の方法

ファイルを新しい名前にコピーする - 最短の方法

ディレクトリには、特定の拡張子を持つ約150個のファイルがあります。たとえば、次のようになります。

abc.ext
def.ext
ghi.ext
...

さて、これらのファイルをすべて拡張子なしで新しいファイル名にコピーしたいと思います。

abc
def
ghi

これを行う最短の方法は何ですか? bashファイルを書かずにループを書くことはできますか?

編集:答えてくれてありがとう(dirkt、John Newman)。
回答を見た後は、ループがあっても短い回答に固執します。

答え1

スクリプト(「bashファイル」)を書かなくても可能ですが、ループを使用しないと不可能です。

for f in *.ext ; do cp -- "$f" "$(basename "$f" .ext)" ; done

basenameサフィックスを削除するために使用できます。

答え2

ループがないことが確実に可能です。わかりました…これはあなたに任せます。

$ find . -type f -name "*.ext" -print0 | xargs -0 -I {} echo cp -T {} {}SUB | sed -e 's/\.extSUB//g'

準備モードを終了するには、shにパイプを接続します。 $ IFSを処理しない限り、バックティックは改行文字を削除するので役に立ちません。前述のように、バックティックには他の文字の問題があります。最後の引数には通常ディレクトリが必要なので、cp -Tも必要です。

上記のように「担当者」は十分ではありませんが、${}これを避けるためにbashでさまざまなトリックを使用できますbasename

部分文字列:${f:0:-4} または最も長い一致:${f%%.ext}

関連情報