我有一个目录,看起来像这样:
pages/
folder1/
folder1.filename1.txt
folder1.filename2.txt
folder2/
folder2.filename4.txt
folder2.filename5.txt
folder3/
filename6.txt
我希望它看起来像这样:
pages/
folder1/
filename1.txt
filename2.txt
folder2/
filename3.txt
filename4.txt
folder3/
filename5.txt
使用ls * | sed -e s/^[^.]*.// > /tmp/filenames.txt
命令,我得到了一个包含以下内容的文件:
filename1.txt
filename2.txt
filename3.txt
filename4.txt
txt
我该如何告诉sed忽略形式为
[filename].[suffix]
的文件名,只查看形如[foldername].[filename].[suffix]
的文件名?最终脚本(正如指出的那样,find命令会简化事情,但这也有效):for folder in $(ls .)
do
if test -d $folder
then
pushd $folder
ls * | sed 's/.*\.\(.*\..*\)/\1/' > /tmp/filenames.txt
ls * > /tmp/current.txt
exec 3</tmp/current.txt
exec 4</tmp/filenames.txt
while read file <&3; read name <&4;
do
mv "$file" "$name"
done
rm /tmp/current.txt
rm /tmp/filenames.txt
popd
else
echo $folder "not a directory"
fi
done
exit 0
本页面现已成为社区维基。您可以在下方添加更加优雅的解决方案:
for folder in $(ls .)
do
something better
pushd
。 - Douglas Leeder