10

これは比較的些細なことですが、私はしばらくの間、あまり運がなくて努力してきました。私はディレクトリを持っており、それぞれが独自の構造とファイルを持つ多くのサブディレクトリがあります。

.java作業ディレクトリの下の任意のディレクトリ内のすべてのファイルを検索し、それらの名前を特定の名前に変更しようとしています。たとえば、すべてのJavaファイルに名前を付けたいと思いますtest.java

ディレクトリ構造が次の場合:

./files/abc/src/abc.java
./files/eee/src/foo.java
./files/roo/src/jam.java

名前を次のように変更したいだけです。

./files/abc/src/test.java
./files/eee/src/test.java
./files/roo/src/test.java

私の問題の一部は、パスにスペースが含まれている可能性があることです。クラスの名前やファイル内の名前を変更する必要はありません。ファイル名だけを指定します。

ディレクトリに複数の.javaファイルがある場合、それが上書きされても、何をするかを選択するためのプロンプトが表示されてもかまいません(どちらでもかまいませんが、各ディレクトリに複数のファイルがある可能性は低いです。

私が試したこと:

私は調べてみましmvfind; しかし、私がそれらを一緒にパイプするとき、私はそれを間違っているようです。ファイルを現在の場所に保持して名前を変更し、移動しないようにします。

4

2 に答える 2

23

のGNUバージョンには、ファイルがある場所にディレクトリを変更findするアクションがあります。-execdir

find . -name '*.java' -execdir mv {} test.java \;

お使いのバージョンがfindサポートしていない場合は、次の方法-execdirで作業を完了できます。

find . -name '*.java' -exec bash -c 'mv "$1" "${1%/*}"/test.java' -- {} \;
于 2013-02-21T16:18:14.787 に答える
5

あなたのfindコマンド(私のような)がサポートしていない場合-execdirは、次のことを試してください。

find . -name "*.java" -exec bash -c 'mv "{}" "$(dirname "{}")"/test.java' \;
于 2013-02-21T16:23:23.763 に答える