スクリプトを使用して、UNIXのフォルダ内のファイルの名前を変更したいとします。
元のファイルの形式は次のとおりです。UNIXのファイル名を変更する
abc.txt.temp
と私はそれを名前を変更したい:
abc.txt
多くのファイルがこの形式を使用して、私は.TEMPを削除したいです元のファイル名から削除します。
スクリプトを使用して、UNIXのフォルダ内のファイルの名前を変更したいとします。
元のファイルの形式は次のとおりです。UNIXのファイル名を変更する
abc.txt.temp
と私はそれを名前を変更したい:
abc.txt
多くのファイルがこの形式を使用して、私は.TEMPを削除したいです元のファイル名から削除します。
にシプリアンが与えた答えは確かにオプションですが、私はそれが限界だと感じ。 以下の解決策は、実際に何かを数える必要がなく、最後だけでなく任意の位置からテキストを取り除くことができるので、はるかに柔軟です。
for filename in *; do mv "$filename" "${filename//.temp/}"; done
注「*」現在のフォルダ内のすべてのファイルを意味します
次のコマンド(1行)は、すべてのファイルに.TEMPの一切の言及を削除します。 * .tempを使用すると、Ciprianの方法とまったく同じ結果を得ることができます。 (つまり、.tempで終わるファイルから.tempを取り除くだけです)
はうまく動作します。私はすぐにたくさんのファイルの名前を変更することができました。 1ライナーで! – Ritesh
うれしい私は助けることができました!私はこのコマンドを自分で使いましたが、いつも私が探していた結果が得られました:) 私の答えに「受け入れられた」とフラグを立てると、他の人が答えを早く見つけることができるようになります。 $ *のファイル名は –
です。 mv "$ filename" "$ {filename //。temp /}"を実行します。これは正常に動作します。しかし、100個のファイルと特定の日付のみを名前変更したいのであれば、これは面倒です。スクリプトの日付をパラメータとして渡す方法はありますか?それはファイル名を渡すことなく、その日付のファイルの名前を変更するだけです – Ritesh
'rename.sh' のような名前で以下のスクリプトを作成します。
#!/bin/bash
TARGET_DIR=$1
TARGET_FILES="$TARGET_DIR/*.temp"
for fileName in $TARGET_FILES
do
newFileName=${fileName::-5}
mv -v "${fileName}" "${newFileName}"
done
ノートを${var:offset:length}
拡大は、bashのバージョン4以降が必要です。
はそれを実行権限を付与します。
chmod a+x rename.sh
あなたはそれを呼び出し、パラメータとして.TEMPファイルのディレクトリの名前を渡す必要があります。このようにそれを呼び出します。
./rename.sh /path/to/the/temp-files
スクリプトは、ターゲットフォルダ内のすべての* .TEMPファイルをループファイルパスから最後の5つの文字を抽出し(「.TEMPが」5つの文字である)と、元のファイルを移動します拡張子として.tempが含まれていない新しいファイルにコピーします。
EDIT:テストCentOSの7
部分文字列式<0エラー – Ritesh
@Ritesh、mvコマンドに冗長モードを追加しました。スクリプトを修正してもう一度実行してください。 mvコマンドに-vオプションがあることに注意してください。その後、出力を表示してください。私はファイル名の問題を疑っていますが、正確にはそれを確認する必要があります。 –
おそらく関係があります:: - :) –
私はUNIXについてよく分かりませんが、質問にはLinuxタグが含まれているため、UNIX/Linuxの混乱の可能性があります。
ほとんどのGNU/Linuxディストリビューションにはrename
コマンドがあります。あなたが望む、あなたのケースでは
rename 's/foo/bar/' files
:rename
バージョンによっては、構文がいずれかのような単純な
rename foo bar files
かもしれbar
files
内の名前とfoo
を交換するか、sed
の正規表現の構文に従ってください.temp
をすべてのファイルの空の文字列(''
)に置き換えます。rename
バージョンに応じて、これらのコマンドのいずれかが動作するはずです。
ショー': 'MMVを "* .txt.temp" "#の1.TXT"' – RomanPerekhrest
出力をprename'
または
–可能な重複[フォルダ内のファイルの一括リネーム用のシェル/バッシュショートカット](https://stackoverflow.com/questions/8416990/shell-bash-shortcut-for-bulk-renaming-of-files-in-a-folder) – Fabien