いくつかのフォルダ名を変更するように管理者からシェルスクリプトを受け取りましたが、何らかの理由でフォルダ名にキャリッジリターンがあります(スクリプトはUATでうまく機能しましたが、2つのことがわかりません。環境間の違いは何ですか?)。 )私のアプリケーションがその項目を見つけることができない場合はフォルダが作成されるため、マージする必要があるファイルを含む2つのフォルダがあります。
したがって、testfolder\r および testfolder フォルダーがある場合はどうすればよいですか。正しくファイル名が競合している場合、正しいフォルダの内容を保持しながら、「CR」フォルダ内のすべてのファイルを正しいフォルダに移動するには、次のコマンドを作成しますか?
mv testfolder\r/* testfolder/
答え1
bash(またはkshまたはzsh)とGNU mvを使用してください。-n
または--no-clobber
オプション:
for file in testfolder$'\r'/*; do mv -n "$file" testfolder; done
これは以下を使用します。$' ... '
ANSI C見積もりキャリッジリターンがあるフォルダの名前を取得すると、残りの部分はファイルを移動(破壊しない)する単純なループだけです。