1

このコードでsedを使用してすべてのメタキャラクターを削除するシェルスクリプトを実行しています。

for file in /path/to/folder/*; do
   mv "$file" "$(echo $file | sed "s,[()\^\$\?*+=\|#!@%&-],,g")"
done

うまく機能しますが、スラッシュ ("/") も検索するようにすると、すべてのファイルが削除されます。これは私が使ったものです。s,[/()\^\$\?*+=\|#!@%&-],,g

何故ですか?また、スラッシュもターゲットにする方法を教えてください。

ありがとう。

4

2 に答える 2

1

これを使用することをお勧めします (四角い車輪を再発明しようとしないでください) :

detox /path/to/dir/*

http://detox.sourceforge.net/を参照

説明 : 文字を標準の同等のものに置き換えてファイル名をクリーンアップするように設計されたユーティリティ

于 2013-08-07T18:45:44.313 に答える
1

いいえ、ファイルは削除されませんでしたが、すべてドットで始まるため、非表示.になっている可能性があります。実行ls -alしてそれらのファイルを表示します。

何が起こったのかというと、sed コマンドにスラッシュを含めること/で、ファイルの名前が次のように変更されているということ.filenameです/

于 2013-08-07T18:46:17.227 に答える