
ディレクトリには、特定の拡張子を持つ約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}