編輯:好吧,對不起,我應該指定我在Windows上,並使用基於bash 1.14.2的win-bash以及gnuwin32工具。這意味着所有發佈的解決方案都不起作用。它不包含許多高級功能。然而,我終於明白了。這是一個醜陋的腳本,但它的作品。遞歸BASH重命名
#/bin/bash
function readdir
{
cd "$1"
for infile in *
do
if [ -d "$infile" ]; then
readdir "$infile"
else
renamer "$infile"
fi
done
cd ..
}
function renamer
{
#replace " - " with a single underscore.
NEWFILE1=`echo "$1" | sed 's/\s-\s/_/g'`
#replace spaces with underscores
NEWFILE2=`echo "$NEWFILE1" | sed 's/\s/_/g'`
#replace "-" dashes with underscores.
NEWFILE3=`echo "$NEWFILE2" | sed 's/-/_/g'`
#remove exclamation points
NEWFILE4=`echo "$NEWFILE3" | sed 's/!//g'`
#remove commas
NEWFILE5=`echo "$NEWFILE4" | sed 's/,//g'`
#remove single quotes
NEWFILE6=`echo "$NEWFILE5" | sed "s/'//g"`
#replace & with _and_
NEWFILE7=`echo "$NEWFILE6" | sed "s/&/_and_/g"`
#remove single quotes
NEWFILE8=`echo "$NEWFILE7" | sed "s/’//g"`
mv "$1" "$NEWFILE8"
}
for infile in *
do
if [ -d "$infile" ]; then
readdir "$infile"
else
renamer "$infile"
fi
done
ls
我想創建一個bash腳本來遞歸通過一個目錄和重命名文件,以刪除空格,破折號和其他字符。我已經得到了我所需要的腳本,除了它的遞歸部分。我仍然對此感到陌生,所以它不像應該那樣高效,但它很有效。任何人都知道如何做這個遞歸?
#/bin/bash
for infile in *.*;
do
#replace " - " with a single underscore.
NEWFILE1=`echo $infile | sed 's/\s-\s/_/g'`;
#replace spaces with underscores
NEWFILE2=`echo $NEWFILE1 | sed 's/\s/_/g'`;
#replace "-" dashes with underscores.
NEWFILE3=`echo $NEWFILE2 | sed 's/-/_/g'`;
#remove exclamation points
NEWFILE4=`echo $NEWFILE3 | sed 's/!//g'`;
#remove commas
NEWFILE5=`echo $NEWFILE4 | sed 's/,//g'`;
mv "$infile" "$NEWFILE5";
done;
我覺得它比計算器更多的超級用戶,但如果它只是爲了解決一個特定的Linux操作系統中的東西我會使用查找和重命名。 – Fredrik 2010-11-22 20:49:49
如果您使用`*。*`,則不匹配不包含「`。」「的文件。在Bash中,僅僅使用`*` – 2010-11-22 21:27:56