回答:
引用符を使用:
mv -- "$file" "$(echo "$file" | sed ...)"
そうでなければmv、複数の引数が見られます。呼び出されるファイル名file name with spacesは、の4つの引数になりmvます。したがって、エラー:when moving multiple files, last argument must be a directory。ときにmv2つの以上の引数があり、あなたが(そして、最後の引数になります)ディレクトリに複数のファイルを移動したいと仮定しています。
ただし、ファイル名の最初の5文字を削除したいようです。それは次のように簡単に行うことができますbash:
mv -- "$file" "${file:5}"
編集:--@ paboukのコメントのおかげで、フラグを追加しました。ダッシュで始まるファイル-も正しく処理されます。
mv。:)あなたはそのケースを処理しました:) ---私が意味したことはechoそれ自体の問題でした。たとえば、GNUエコー(スタンドアロンとbashビルトインの両方)は-n、これらの文字列を出力しません:-eと-E。POSIXの定義に従ってもecho、特定の状況が未定義であるため、確実に使用することはできません。XSI準拠echoは、バックスラッシュエスケープシーケンスを解釈します。--- printf '%s\n'このような望ましくない、実装に依存する影響はありません。
Perlと一緒に配布されることが多いprenameを使用できます。(例えば、Debianのでは/ usr / binに/ prenameがでインストールされperlたパッケージ。)ディストリビューション(のための表情でパッケージされていない場合prenameやrename、従来のバイナリの場所で)、それはのような、多くの場所からダウンロードできます。たとえば、ここ、ここ、またはここ。
このスクリプトは、正規表現を使用して各ファイル名と一連のファイル名に適用し、その正規表現に従ってそれらのファイルの名前を変更します。
たとえば、あなたは
prename -v -n 's/^.{5}//' *
ファイル名の最初の5文字を削除するとどうなるかを示します。名前変更を実際に実行するには、単にを削除し-nます。
-。echo "$file"使用する代わりにprintf '%s\n' "$file"。