仮称「NTFS+Win32だめ文字、パターン」
ファイルシステムとしてのNTFSではOKだが、OSとしてのWindowsでは許容されずファイル名に使うとややこしくなる(消せない、見えないなど)文字、仮称「NTFS+Win32だめ文字、パターン」というのがあります。ディレクトリについても同じです。- 末尾がスペースで終わるファイル名。 "大阪Lover "
- 末尾がコロンで終わるファイル名。"大阪Lover."
当方の癖や意図で、作るパターンはこの2つ。後者はWindowsしか使ったことがない人には理解できないかもしれません。それはそれで幸せ。このふたつを代表例に対応を例示してみます。
以下、renamej というのは、自分がパッチをあてたものなので、標準ubuntuではrenameです。
新規にターミナル(端末)を開きます。ubuntu系は以下を同時押し。CTRL+ALT+T
findを使って一括処理するのが楽なので、find前提です。たった一つなら、ubuntuのファイルマネージャー(Windows用語、エクスプローラ)で、リネームすれば良いのです。
末尾空白
末尾がスペースで終わるファイルを列記する。ディレクトリ限定
find . -type d -name '*? ' -execdir echo \"{}\" \;
# find . -type d -name '*? ' -execdir echo \"{}\" \;
その余分なスペースを除去する。リネームする。
(リネームの変化を確認) -n
find . -type d -name '*? ' -execdir renamej -n 's|\s$||' {} \;
(リネームを実行) -v
find . -type d -name '*? ' -execdir renamej -v 's|\s$||' {} \;
#こっちが賢いかも。(リネームの変化を確認) -n
find . -type d -name '*? ' -execdir renamej -n 's|\s$||' {} \;
(リネームを実行) -v
find . -type d -name '*? ' -execdir renamej -v 's|\s$||' {} \;
find . -type d -name '*? ' -execdir renamej -v 's|(.*?)\s$|$1|' {} \;
末尾ドット
末尾がドットで終わるファイル名を列記する。(MS-DOS制限が伝統のWindows)
find . -type f -name '*?.'
#find . -type f -name '*?.'
末尾ドットのみまとめて削除(つまりリネームする)
find . -type f -name '*?.' -execdir renamej -v 's|(.*?)\.$|$1|' {} \;
#find . -type f -name '*?.' -execdir renamej -v 's|(.*?)\.$|$1|' {} \;
末尾ドットのみまとめて削除(リネームする)ドット連続も一度にリネームする。
find . -type f -name '*?.' -execdir renamej -v 's|(.*?)\.*?$|$1|' {} \;
find . -type f -name '*?.' -execdir renamej -v 's|(.*?)\.*?$|$1|' {} \;
自分の場合は正規表現的にもこれくらいで対応できます。Bash on Windows で実行できるかもしれませんが試していません。Windowsを起動することがあればやってみよう。
完全な隠しディレクトリを作る裏技(単なる応用)
別の視点で考えます。積極的に考えると、末尾空白、末尾ドットなどを活用するとファイルが隠せます(エクスプローラーでは開けないよー、消せないよーなどの特性を活用するわけです)。先頭ドットなども組み合わせて、いろいろ頑張ってください。何のこっちゃ。初心者には理解できないからいいのですね。この節はWindows視点で書かれています。
根こそぎ、変換はしないほうがいい「:」
「:」に関しては、根こそぎはやめたほうがいいです。一般ユーザーには使わせませんが、WindowsOSは「:」の入ったシステムファイルを作ります。根こそぎやって、少し泣いた。笑) 慎重に条件指定してください。
メモ
\ < > : " / \ | ? *
AUX、CLOCK$
COM1 ~ COM9、CON、CONFIG$
LPT1 ~ LPT9、NUL、PRN
メモ
\ < > : " / \ | ? *
AUX、CLOCK$
COM1 ~ COM9、CON、CONFIG$
LPT1 ~ LPT9、NUL、PRN
おまけ、fuseNTFSでクラッシュが置きた場合などに残るドットファイルを削除する。ubuntuなら /media/ 配下に通常できます。デフォルトでそこにマウントされるので。以下例示。
cd /media
find . -name '.fuse*' で探す。
削除したい場合
find . -name '.fuse*' -delete 探したリスト通りでよければ問答無用で削除する。
find . -name '.fuse*' で探す。
削除したい場合
find . -name '.fuse*' -delete 探したリスト通りでよければ問答無用で削除する。