GNU/Linux >> Linux の 問題 >  >> Linux

パターンに従ってLinuxで多くのファイルの名前を変更する

私はこれらをテストしていないので、 echo を入れます コマンドの先頭にあるので、エコーを削除して実際に実行する前に試すことができます。

<オール>
  • for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
    
  • for f in *_*; do echo mv "${f}" "${f//_/-}"; done
    
  • 3 番目の問題については、それも実行できると確信していますが、@tchrist が述べたように、生のシェルのワンライナーよりも洗練されたアプローチが役立つかもしれません。


    rename があります このコマンドは、1998 年頃の Larry Wall のオリジナル コードに基づいて Robin Barker によって作成された、ほとんどの Debian/Ubuntu ベースのディストリビューションで提供されています(!)。

    以下はドキュメントからの抜粋です:

      "rename" renames the filenames supplied according to the rule specified as the first argument.  The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames
      specified.  If a given filename is not modified by the expression, it will not be renamed.  If no filenames are given on the command line, filenames will be read via standard input.
    
      For example, to rename all files matching "*.bak" to strip the extension, you might say
    
              rename 's/\.bak$//' *.bak
    
      To translate uppercase names to lower, you'd use
    
              rename 'y/A-Z/a-z/' *
    

    これは perl を使用しているため、perl 式を使用してパターンに一致させることができます。実際、tchrist のスクリプトと同じように機能すると思います。

    ファイルの名前を一括で変更するためのもう 1 つの非常に便利なツール セットは、Oskar Liljeblad による renameutils コレクションです。ソース コードは、Free Software Foundation によってホストされています。さらに、多くのディストリビューション (特に Debian/Ubuntu ベースのディストリビューション) には renameutils があります。 これらのツールをパッケージ化します。

    これらのディストリビューションのいずれかにインストールできます:

    $ sudo apt-get install renameutils
    

    次に、ファイルの名前を変更するには、次のコマンドを実行します:

    $ qmv
    

    ファイルのリストが表示されたテキスト エディターがポップアップ表示され、エディターの検索と置換機能を使用して操作できます。


    私のお気に入りの解決策は、私自身のrenameです 脚本。あなたの問題に対応する最も簡単な例は次のとおりです:

    % rename 's/_/-/g' *
    % rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *
    

    私はファイル名の空白、特に縦方向の空白が大嫌いですが:

     % rename 's/\s//g' *
     % rename 's/\v//g' *
    

    など。 The Larry Wall のスクリプトに基づいていますが、次のようにオプションで拡張されています。

    usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
        -i          ask about clobbering existent files
        -f          force clobbers without inquiring
        -q          quietly skip clobbers without inquiring
        -I          ask about all changes
        -0          read null-terminated filenames
        -v          verbosely says what its doing 
        -V          verbosely says what its doing but with newlines between old and new filenames
        -n          don't really do it
        -m          to always rename
        -l          to always symlink
        -F path     read filelist to change from magic path(s)
    

    ご覧のとおり、ファイルの名前だけでなく、同じパターンを使用してシンボリック リンクが指している場所も変更できます。 s/// を使用する必要はありません

    そのディレクトリ内の他のツールは、ほとんどが Unicode 作業用であり、そのうちいくつかは非常に便利なものです。


    Linux
    1. Linuxですべてのファイルとディレクトリ名を小文字に変更

    2. Linuxでファイルの名前を変更する方法

    3. Linux で複数のファイルを見つけて名前を変更する

    1. Linux でファイル名を大文字に変更

    2. Linuxでファイルの名前を再帰的に変更する(拡張子を変更する)

    3. Linuxで正規表現を使用してファイルの名前を変更する

    1. 「名前の変更」を使用して小文字の拡張子を持つようにファイルの名前を変更しますか?

    2. Linuxで一度に複数のファイルの名前を変更する方法

    3. Metamorphose 2 –Linuxでファイルとフォルダーの名前をバッチで変更