Linux

如果第一個字元為“0”,則從所有文件中刪除

  • February 8, 2018

我有幾個文件夾:

1
2
3
4
5

所以在每個文件夾中我都有像

00123.mp3
00133.mp3
00150.mp3

所以如果它們位於文件名的開頭,我想刪除所有0

我試過這個

for file in *; do echo mv "$file" "${file//[ ()@0]/}"; done

但它刪除了開始和文件名內部的所有0(我只需要開始),這在子目錄中也不起作用

如果您使用 bash,此腳本將執行您的要求:

#!/bin/bash
shopt -s extglob
while IFS= read -d '' f ; do
   file=${f##*/}
   dir="${f%/*}/"
   echo \
   mv "$dir$file" "$dir${file##+(0)}"
done < <(find . -type f -name '0*.mp3' -print0)

一旦您同意要移動的文件列表,請評論該echo \行以實際執行命令。mv

或者這個 sh 版本的可移植性:

#!/bin/sh

find . -type f -name '0*.mp3' -print |
while IFS= read f; do
   file=${f##*/}
   dir="${f%/*}/"
   f2=$file; until [ "$f2" = "${f2#0}" ]; do f2=${f2#0}; done
   echo \
   mv "$f" "$dir${f2}"
done

引用自:https://unix.stackexchange.com/questions/422644