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' *
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/)
に変更します。
使用できます: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を好きなだけ変更して、必要なものを置き換えることができます。