web-dev-qa-db-ja.com

ディレクトリ/ファイル名から特定の文字を一括削除するにはどうすればよいですか

Fedora 29でこれを行うために使用できるコマンドは何ですか?[、]、および-を削除する必要があります。可能であれば、文字を削除してください。それ以外の場合は、「_」として置き換えるのが適切です。2,400以上のファイルとディレクトリがあり、次のような名前のサブディレクトリがあります。

TWENTY_ONE_PILOTS_-_DISCOGRAPHY_(2009-15)_CHANNEL_NEO]

ディレクトリを簡単に作成できるようにする必要があります。例えば:

TWENTY_ONE_PILOTS_DISCOGRAPHY_2009_15_CHANNEL_NEO

私はもう試した:

find . -depth -name '*]*' -execdir bash -c 'for i; do mv "$i" "${i

│// /_}"; done' _ {} +

そして

for x in *]*; do mv -- "$x" "${x//[/}"; done

Andd

rename 's/\(|\[|\]|\)//g' *
1
RobertW

zshの場合:

$ autoload zmv
$ zmv -n '(**/)(*)' '$1${${${2//[^.[:alnum:]]##/_}##_#}%%_#}'
mv -- TWENTY_ONE_PILOTS_-_DISCOGRAPHY_\(2009-15\)_CHANNEL_NEO\] TWENTY_ONE_PILOTS_DISCOGRAPHY_2009_15_CHANNEL_NEO

Alnumと.以外のすべての文字シーケンスを_に変換し、その後、すべてのファイルとディレクトリで、先頭と末尾の_sを再帰的に削除します。

-nドライラン用です。問題がなければ削除してください。

タイプdirectoryのファイルの名前を変更するだけの場合は、(**/)(*)(**/)(*)(#q/)に変更します。

1

使用できます:find . -exec sh -c './correct.sh {}' \;

上記のコマンドを起動したときと同じディレクトリにcorrect.shを使用します。

#!/ bin/bash

mv "$ 1" $(echo "$ 1" | sed's/_-_/_/g ');

chmod +x correct.shすることを忘れないでください!)

これはあまりエレガントなソリューションではありませんが、機能します。ファイルの名前ごとに実行されるfindのオプションである-execを除いて、すべてが自明です。プロセスは言及されており(ここではsh -c '...')、{}をファイルの名前!詳細については、 マニュアルページを検索 を参照してください。

ファイルディレクトリのみの名前を変更する場合は、findのオプションとして-type dを挿入します。そしてもちろん、sedを好きなだけ変更して、必要なものを置き換えることができます。

0
Manu T.