web-dev-qa-db-ja.com

奇妙な名前の空のディレクトリは削除できません

私は、bleachbitの「空きディスク領域のワイプ」プロセスが中断された後に作成された3つの空のディレクトリを削除しようとして苦労しています。 rm -drm -frm -rなどのコマンドを使用して削除し、それらの名前を変更して移動しようとしました。 「まだそこにいる。

ディレクトリは、ホームディレクトリではなく、個別のパーティションにあります。名前は次のとおりです。

  1. -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
  2. CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC
  3. qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9

何かしようとすると、次のようなメッセージが表示されます。

そのようなファイル、又はディレクトリはありません

出力の一部を次に示します。

me@MyPC:~$ rm -f /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

me@MyPC:~$ rmdir -- $ 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove '$': No such file or directory
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir -- 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': No such file or directory

me@MyPC:~$ Sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': No such file or directory



me@MyPC:/media/me/702E29F142F2362F$ rmdir -- $'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9'
rmdir: failed to remove 'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9': No such file or directory

ゴミ箱に移動するか、Nautilusを使用して削除するを試みると、次のようになります。

Nautilus showing a similar "No such file or directory" error

2
AliOuld

名前の一部は-で始まるため、--を最初に渡すか、絶対パスを使用します。

空のディレクトリの場合は、rmdirコマンドを使用して、削除する最初のディレクトリの名前の前に、別個のWordとして--を記述します。 --が渡されなかった場合(これはrmdirと同様に試行したコマンドにも当てはまります)、-で始まる単語は、コマンドの実行方法を制御するオプションのコレクションとして解釈されますコマンドの操作対象のファイル名としてではなく動作します。

所有するディレクトリ名に基づいてコマンドを記述する必要があります。 Stack Exchangeビジュアルエディタでファイル名をフォーマットする際にエラーが発生する可能性があるため、この回答から直接コピーすることはお勧めしません。ただし、名前が次のディレクトリの場合、必要に応じて変更することを期待している例として:

-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

そしてそれは空で、親ディレクトリにいます(cdを使ってそこに行き、pwdを使って現在のディレクトリを確認できます)、次のように削除できます:

rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

または、rootが所有している場合、またはそれ以外の場合は削除する権限がない場合:

Sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

--引数の後にスペースがあることに注意してください。それは重要です。

または、ディレクトリのフルパスを使用できます。そうすれば、コマンドを実行するときにどのディレクトリにいるかを心配する必要はなく、--はオプションです。例(コメントで示した内容に基づく):

rmdir /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

(または、上記のSudo rmdirを使用します。)

一部の名前には、引用符が必要な文字が含まれている場合があります。

それでも解決せず、同じNo such file or directoryメッセージが引き続き表示される場合、問題はディレクトリの命名に失敗していることです。おそらくそれらの名前には珍しい文字が含まれています。

これがあなたが示したものに基づいたケースであることは明らかではありませんが、それは一般的な問題ですので、念のためそれを含めています。ディレクトリ名にスペース、または改行、*、または$のようにシェルによって特別に処理された他の文字が含まれている場合、名前を一重引用符で囲む必要があります。名前自体に単一引用符が含まれていない限り、これで十分です。

より一般的には、cdを使用してこれらのディレクトリを含むディレクトリに移動した場合、次のコマンドを実行することにより、そのディレクトリ内のエントリのリストを取得できます(削除したいサブディレクトリを含む)。

ls -1b

これは、次の2つの便利な点で通常のlsコマンドと異なります。

  • -bフラグは、$''の間に貼り付けることができるエスケープシーケンスを使用してパスを出力します。 最初の$文字と開始'文字の間にスペースを入れてはいけません。
  • -1フラグは、lsを1行に1エントリずつリストします。これにより、あるファイル名がどこで終わり、次のファイル名が始まるかという混乱を減らすことができます。

これにより、これらのディレクトリを削除、名前変更などするコマンドを作成できます。それらが本当に空の場合は、rmdirコマンドを使用して削除できます。このコマンドをrootとして実行する必要がある場合がありますが、これはSudoで実行できます。

実行する可能性のあるコマンドの意図的に単純化した図を次に示します。 ls -1bがリストされているとします:

abc\ def
ghi\njkl
pqr\b\b\bstuv
$$$$$$$\b\b\b$$$

最初のケースではスペースがあります。 2番目のケースでは、改行(改行)があります。 3番目のケースでは、3つのバックスペース文字があります。 4番目のケースでは、$とバックスペース文字の両方があります。

これらのディレクトリを削除するには、次を使用できます。

rmdir -- $'abc\ def'
rmdir -- $'ghi\njkl'
rmdir -- $'pqr\b\b\bstuv'
rmdir -- $'$$$$$$$\b\b\b$$$'

上記のように、Sudoが必要になる場合があります。

rmdirは複数のファイル名をとることができますが、削除ごとに1つのコマンドを使用すると、エラーメッセージがあればそれを理解しやすくなります。

これらの特定の例では、ディレクトリ名は-で始まっておらず、--フラグは必要ありませんでした。しかし、害はありませんでした。

$''対プレーン''

''との引用とは異なり、$''との引用は、\n\bなどのバックスラッシュエスケープを展開します。

'ghi\njkl'は、名前が文字どおりのファイルを識別します。

  • ghi\njkl

対照的に、$'ghi\njkl'は、次の名前のファイルを識別します。

  • ghi jkl

グラフィカルファイルブラウザを実行している場合、そこからドラッグできる場合があります。

一部のグラフィカルファイルブラウザ(Nautilus、つまり「ファイル」など)および一部のターミナル(GNOMEターミナルなど)では、作成中のターミナルコマンドでファイルへの使用可能な絶対パスを取得するさらに簡単な方法があります。

これは、グラフィカルユーザーインターフェイスがインストールされているほとんどのUbuntuシステムで機能しますが、SSHを介してリモートでログインしている場合はほとんど機能しません。

ファイルブラウザウィンドウからフォルダをドラッグをターミナルウィンドウにドラッグして、ターミナルへのフルパスを貼り付けることができます。ターミナルウィンドウ上にマウスを置いて、ボタンを離します。

これを有効にするには、最初に実行するコマンドを記述するのが最善の方法です。たとえば、これを書いて、最後にスペースを含めて、押さないでください Enter まだ:

rmdir --

次に、ファイルブラウザウィンドウからターミナルウィンドウにフォルダをドラッグします。ファイルブラウザとターミナルエミュレータがサポートしている場合、パスが貼り付けられ、\または'ベースのクォートが自動的に提供されます。次に押すことができます Enter コマンドを実行します。コマンドが成功しなくても、通常はNo such file or directoryよりも有用なエラーメッセージが表示されます。

5
Eliah Kagan

グラフィカルな方法

Ubuntuに組み込まれているnautilusファイルマネージャーを使用します。ディレクトリを強調表示し、右クリックして「ゴミ箱に送る」を選択するだけです。ディレクトリに大きなファイルがある場合は、すぐにゴミ箱を空にすることができます。

ディレクトリがルートによって所有されている場合、Nautilusでは削除できません。この場合、ターミナルを開き、次を使用します。

gksu nautilus

ゴミ箱に移動できませんが、直接削除できます

これによると Linux Mint question 一部のWindowsファイルはゴミ箱に移動できませんが、直接削除できます。

このスレッドの別の答えは、次を使用してファイルシステムタイプを見つける方法を示しています。

df -T /media/<path_to_project_folder>

その後、/etc/fstabエントリを変更すると、異なるパラメーターを使用してマウントし、ファイルを正常に削除できました。


ターミナル方式

このように スーパーユーザーQ&A 特殊文字(変な名前)が含まれるファイルを削除するには、それらを含むディレクトリに移動して、次のコマンドを使用します。

rm -i -- *

これにより、各ファイルを削除するように求められます。多くのファイルがある場合は、「*」をより狭い一致に変更できます。 --はオプションの処理を停止するため、-dという名前のファイルはrmによって正常に削除されます。

同じスレッドの別の回答では、iノード番号を使用して削除することを提案しています。 ls -liを使用して、すべてのファイルをiノードごとに表示できると書かれています。次に、このコマンドを実行してファイルを削除します。

find . -inum ${INODE_NUM} -delete

安全のために、私の検索結果に-maxdepth 1を追加できます。

find . -maxdepth 1 -inum ${INODE_NUM} -delete
2