各ファイル名からいくつかの文字列を削除する方法

各ファイル名からいくつかの文字列を削除する方法

[root@localhost ~]# ls *.bak

test2.bak test3.bak test9.bak test.bak test.txt.bak

.bakすべてのファイルのすべての内容を削除する方法は?これが私の現在の試みです

ls *.bak|xargs -t -i mv {}.bak {}

しかし、これは私には効果がありません。ここに回避策はありますか?

答え1

ループは次のことを行う必要があります(POSIXに似たシェルで):

for f in *.bak; do 
    mv -- "$f" "${f%.*}"
done

一行:

for f in *.bak; do mv -- "$f" "${f%.*}"; done

答え2

使用rename注文する:

rename 's/\.bak$//' *.bak

  • 's/\.bak$//'-真珠式は、次に終わるすべてのファイル名と一致し、.bak拡張子を削除します。

答え3

すべてのプラットフォームで動作する必要があるもの:

for i in *.bak
do
  mv $i `echo $i | sed 's/\.bak$//'`
done

答え4

#!/bin/bash
for val in \`ls *.bat`
do
    mv $val `echo $val | cut -f1 -d'.'`
done

関連情報