回答 #1:私はゼロから始めましたが、機能するものを組み合わせることができました! 最も効率的ではないかもしれませんが、それは仕事をします.
#!/bin/bash
for file in *.php
do
#Check to see if the filename contains any uppercase characters
iscap=`echo $file | awk '{if ($0 ~ /[[:upper:]]/) print }'`
if [[ -n $iscap ]]
then
#If the filename contains upper case characters convert them to lower case
newname=`echo $file | tr '[A-Z]' '[a-z]'` #make lower case
#Perform various search/replaces on the file name to clean things up
newname=$(echo "$newname" | sed 's/---/-/')
newname=$(echo "$newname" | sed 's/--/-/')
newname=$(echo "$newname" | sed 's/-\./\./')
newname=$(echo "$newname" | sed 's/there-s-/theres-/')
#Rename file
echo "Moving $file\n To $newname\n\n"
mv $file $newname
#Update all references to the new filename in all php files
`sed -i "s/$file/$newname/g" *.php`
fi
done
回答 #2:大文字をチェックせず、すべてを変換しようとしますが (すでに小文字のファイルではエラーが発生します)、大文字のファイルのみを処理することがわかっている場合は、aquaが提出したバージョンを使用できます。
#!/bin/bash
for file in *.php
do
newname=`echo $file | tr '[A-Z]' '[a-z]'`
newname=$(echo "$newname" | sed 's/---/-/')
newname=$(echo "$newname" | sed 's/--/-/')
newname=$(echo "$newname" | sed 's/-\./\./')
newname=$(echo "$newname" | sed 's/there-s-/theres-/')
mv "$file" "$newname"
for f in *.php
do
sed -i "s/$file/$newname/g" *.php
done
done
これについてみんなの助けをありがとう!
元の質問と追加情報
オープン ソース ソフトウェア プロジェクトのドキュメントを作成するためにいくつかのソフトウェアを使用していますが、SEO には推奨されない大文字の HTML ファイルを出力します。そのため、すべての .html ファイルを小文字に変更してから検索/置換する bash スクリプトを作成しようとしています。
だから、私はこれを変えたい:
This-Is-The-Output.html
これに:
this-is-the-output.html
次に、現在のディレクトリ内のすべてのファイルで「This-Is-The-Output.html」を検索し、「this-is-the-output.html」に置き換えます。
オンラインで見つけたものに基づいて何かをつなぎ合わせようとしてきましたが、うまくいきません。私は、bash スクリプトの作成に関して、他の人よりも経験が浅いので、誰かが助けてくれるかどうかを確認するために SO に頼ろうと考えました。
これは私が現在取り組んでいるものです...
#!/bin/sh
for i in *.php;
icleaned=`echo $i | sed s/./\\./g`;
inew="$(tr [A-Z] [a-z] <<< "$icleaned")";
sed -i 's/$i/$inew/g' *.php;
do mv $i $inew;
done
3 行目: 「.」などの特殊文字を検索して置換します。
4 行目: きれいな小文字の文字列を $inew に割り当てます
5 行目: 古いファイル名のすべての参照を新しいファイル名に検索/置換します。
6 行目: ファイルを古いファイル名から新しいファイル名に移動します。
私が得ているエラーは次のとおりです。
line 3: syntax error near unexpected token `icleaned=`echo $i | sed s/./\\./g`'
line 3: ` icleaned=`echo $i | sed s/./\\./g`;'
最初のステップが正しく機能しているかどうかを確認するために icleaned をエコーしてみましたが、まったく同じエラーが発生します。
inew= 行を除くすべてをコメントアウトしてみました:
#!/bin/sh
for i in *.php;
# icleaned=`echo $i | sed s/./\\./g`;
inew="$(tr [A-Z] [a-z] <<< "$i")";
echo $inew;
# sed -i 's/$i/$inew/g' *.php;
# do mv $i $inew;
done
そして、「予期しないトークンに近い構文エラー」エラーがまだ発生しています。
line 4: syntax error near unexpected token `inew="$(tr [A-Z] [a-z] <<< "$i")"'
line 4: ` inew="$(tr [A-Z] [a-z] <<< "$i")";'
スクリプトが非常に多くの点で台無しになっていることは明らかです。
誰かが提供できるどんな助けも大歓迎です。