我有一个如下所示的目录:
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