既定のディレクトリには次のフォルダがあります。
1
2
3
4
5
10
110
したがって、各ファイルには次のものがあります。
0010011.mp3 0010031.mp3 0010051.mp3 0010071.mp3 0010021.mp3 0010041.mp3 0010061.mp3
だから最初の3文字と最後の1文字を削除して、ファイルが次のように見えるようにしたいと思います。
001.mp3 003.mp3 005.mp3 007.mp3 002.mp3 004.mp3 006.mp3
私はこれを試しました
for file in ??????*; do echo mv $file `echo $file | cut -c4-`; done
これはサブディレクトリでも機能せず、デフォルトディレクトリにあるファイルだけが機能します。
ベストアンサー1
*.mp3に一致するすべてのファイルを収集してからファイル名を切り捨てることはお勧めできません。後で(たとえば、次の週)同じスクリプトを再実行したい場合があり、同じファイルの名前を変更し直すと、ファイルが短くなり、命名の競合が発生しないようにします。
サンプルファイル名は次のとおりです。001xyz1.mp3欲しいxyz.mp3
KEEP_DIR=$PWD
cd /your/music/base_dir # sub-dirs holding .mp3
RCOUNT=0 ; SKIP=0 ; FCC=0
for FFF in */001???1.mp3
do
LOC="$(dirname $FFF)"
BAS="$(basename $FFF)"
TRIM1="${BAS#1.mp3}" #could use ${BAS:4:3}
NEWF="$LOC/${TRIM1%001}.mp3"
if [ -e "$NEWF" ] ; then
echo "#-- File $NEWF already exists, not renaming $FFF"
SKIP=$((SKIP+1))
else
mv $FFF $NEWF
MCOUNT=$((MCOUNT+1))
fi
FCC=$((FCC+1))
done
echo "Renamed $MCOUNT mp3 files, of $FCC found. (Skipped $SKIP)"
cd $KEEP_DIR
#--[eof]