ディレクトリ内のすべてのファイルとそのディレクトリの下のサブディレクトリ (およびそれらのサブディレクトリの下のすべてのサブディレクトリなど) で、「Full Tilt」という語句を「FullTilt」に置き換えるにはどうすればよいですか?
4 に答える
少年、それはトリッキーでした!find
最初に、最も深いファイルとディレクトリから開始するには、の出力を逆にする必要があります。次に、スペースを含むファイル名で機能するようにします。そして、すべてのrename
コマンドが同じというわけではありません。名前の変更を定義するために Perl 正規表現を使用する Larry Wall のものが必要です。最初に確認してくださいman rename
。
find foo | tac | while read i; do echo $i; rename 's/(.*)Full Tilt/$1FullTilt/' "$i"; done
何かのようなもの:
find . -name '*xx*' -print | sed -e 's/^\(.*\)xx\(.*\)$/\1xx\2 \1yy\2 /g' | xargs -n2 mv
' xx ' はファイル名の検索文字列です。sed は xx を yy に置き換え、それを xargs にパイプします xargs は現在 (-n2) 2 つのパラメーター (古い名前と新しい名前) を取り、両方のパラメーターで mv を実行します。
それは出発点にすぎません。安全な環境で試してみてください:-)
最初にファイルの名前を変更し ( -type=f )、その後パスの名前を変更しました ( -type=d )。この順序を変更すると、次のファイル名を変更している間にディレクトリの名前が変更されている間、mv は失敗します :-)
ファイル名にスペースが含まれている場合は、print の代わりに print0 を使用する必要があります。ただし、sed の部分も変更する必要があります... 残りは宿題だと思います :-)
何かがまったく機能しない場合は、お気軽にお問い合わせください。