【发布时间】:2013-01-30 19:16:55
【问题描述】:
我有一个目录,其中包含一堆标题为(例如)的文件
how it is: how it should be:
945TITLE-1.txt 945TITLE-00.txt
945TITLE-10.txt 945TITLE-01.txt
945TITLE-2.txt 945TITLE-02.txt
945TITLE-23.txt 945TITLE-03.txt
945TITLE-3.txt 945TITLE-10.txt
945TITLE.txt 945TITLE-23.txt
破折号后面的数字和文本可以改变,所以它需要是可变的。 忽略未编号的文件(本例中为 945TITLE.txt) 我正在使用以下行来获取所有以破折号和一位数字结尾的文件
file=`ls -1 working/pages/files | grep [-][0-9].txt`
但现在我不知道如何在破折号和数字之间拼接 0。
for file in $filelist
do
????
done
经过几次尝试,我得到了最远的结果:
for file in working/pages/files/$filelist
do
f1=${filelist%%[-]*}
f2=${filelist##*[-]}
finalName=${f1}-0${f2}
echo $finalName
mv $file working/pages/files/$finalName
done
$finalName 的输出每次都是945TITLE-03.txt,它只将mv 命令应用于945TITLE-1.txt(错误地将其更改为945TITLE-03.txt)并说它找不到其他文件(因为它只查看working/pages/files/ 文件夹中的第一个文件)
任何帮助都将不胜感激,我绝不会接受这个解决方案,所以如果你能想到一个更优雅的解决方案,但与我的提议不同,我会很高兴听到它。谢谢
【问题讨论】:
-
文件夹结构不清楚:所有文件都在一个文件夹中还是在单独的文件夹中?
-
在设置
f1和f2时,您的意思是使用file而不是filelist? -
是的,这个例子的 xhtml 应该是 txt。 $filelist 是目录中所有文件的列表 $file 应该是该列表中的一个元素