ディレクトリのファイル名を変更する

ディレクトリのファイル名を変更する

私のディレクトリには次のファイル名があります

example1.1.timestamp(.1457644337)
example1.2.timestamp
example1.3.timestamp

約100個のファイルを待ちます。.timestamp(.1457644337)終了を削除してすべてのファイルの名前を変更する必要があります。

単一ファイルに対してこれを行いました。

ls -l filename | sed 's/\.[^.]*$//'

答え1

使用renameprename):

  • すべてのファイルのタイムスタンプが同じ場合は、ファイルを含むディレクトリで次のことができます。

    rename -n 's/\.1457644337$//' example1.*.*
    
  • 他のタイムスタンプの場合:

    rename -n 's/\.\d+$//' example1.*.*
    

再帰的に:

find . -type f -name 'example1.*.*' -exec rename -n 's/\.\d+$//' {} +

-n変更に満足したら、削除(テストを実行)してください。

これにより、数字(含む)を含む最後の部分が削除されます.。したがって、タイムスタンプ以外の任意の数字がある場合でも削除されます。


シェル・パラメーター拡張を使用します。

  • すべてのファイルのタイムスタンプが同じ場合:

    for file in *.*; do mv -i "$file" "${file%.1457644337}"; done
    
  • 他のタイムスタンプの場合は、次のことを想定しますbash(他の高度なシェルにも同様のオプションがあります)。

    shopt -s extglob; for file in *.*; do mv -i "$file" "${file%.+([0-9])}"; done
    

再帰的に:

find . -type f -name 'example1.*.*' -exec \
    bash -ic 'shopt -s extglob; mv -i "$1" "${1%.+([0-9])}"' _ {} \;

ここでは、シェルオプションを使用してextglobパターンを使用して最後の数字以降の数字を一致させるため、代替パラメータ拡張パターンになります。.+([0-9])${file%.+([0-9])}

繰り返しますが、これはタイムスタンプと厳密には一致しません。正確な時間形式がある場合は、堅牢性のためにパターンを変更できます。

答え2

目視検査コマンドを使用して、対話的に次の操作を行います。

ls | vim -

vim内部:

:%s/.*/mv \0 \0/        ...move filename filename
:%s/\.[^.]*$//          ...same as your sed regex
:w !sh                  ...run buffer with shell
:q!                     ...close without saving

関連情報