我已经发现这个 Ask Ubuntu 答案并将其改为:
newdir=$(printf "%04d")
find . -maxdepth 1 -type f -name '*.mp3' -print0 | \
sort -z | while IFS= read -d '' -r file; do \
mkdir -p "$newdir" && mv "$file" "$newdir" ;
((newdir++));
done
可以,但只有第一个文件夹有前导零。我希望所有文件夹都用四位数字编号。
文件应按照-ls l
与本例中显示的顺序相同的顺序移动到文件夹中:
001_003.mp3
001_007.mp3
001_021.mp3
001_035.mp3
002_010.mp3
002_013.mp3
002_029.mp3
为了实现这一点,我-z
在sort
命令中添加了选项(就像上面链接下的原始代码中使用的那样)。
任何帮助,将不胜感激。
答案1
假设bash
n=0
find . -maxdepth 1 -type f -name '*.mp3' -print0 | \
sort -z | while IFS= read -d '' -r file; do \
printf -v newdir '%04d' $((n++));
mkdir -p "$newdir" && mv "$file" "$newdir/" ;
done
如果你使用的 shell 不支持printf -v
,那么你可以使用原始版本中的命令替换,即newdir=$( printf '%04d' $((n++)) )