3

В терминале я пытаюсь удалить каталог, но это не работает:

myuser$ rm -rf foo/
rm: foo/: Directory not empty

В моем основном каталоге у меня есть только foo:

myuser$ ls
foo

У меня нет проблем с моей командой 'ls -la':

myuser$ ls -la
drwxrwxrwx@ 1 myuser  staff  65536  1 mai 10:53 .
drwxrwxrwx@ 1 myuser  staff  32768 28 aoû  2013 ..
drwxrwxrwx  1 myuser  staff  32768  1 mai 10:36 foo

Каталог foo кажется пустым:

myuser$ ls foo/

myuser$ ls -la foo/
ls:  : No such file or directory
total 192
drwxrwxrwx  1 myuser  staff  32768  1 mai 10:36 .
drwxrwxrwx@ 1 myuser  staff  65536  1 mai 10:53 ..

Но строка "ls:: Нет такого файла или каталога" странная. И я думаю, что это причина, по которой я не могу удалить этот каталог. Мы также могли видеть, что "ls foo" возвращает пустую строку, как будто что-то есть, но что? И как это удалить?

Спасибо

3 ответа3

2

Я считаю, что у вас может быть файл в каталоге foo с непечатными символами в его имени. Сравните символы , которые вы видите на выходе ls с реальными характерами ls выходами.

cd foo
ls             # you see what your terminal lets you see
ls | od -a     # you see the character codes *really* coming from ls

Существуют различные методы, помогающие удалить файл, имя которого вы не можете легко увидеть или напечатать. Здесь вы можете использовать интерактивную опцию -i команды rm.

cd foo
rm -i *

Очевидно, будьте осторожны с этим. И только сказать , y той , которую вы хотите удалить.

Что касается того, почему ваш первый rm -rf не удалил его ... Интересно, у вас есть псевдоним? Используйте alias rm чтобы увидеть. Вы можете временно запустить реальную версию rm (минуя псевдоним), используя \rm -rf foo .

1

Сообщение "Каталог не пустой" вводит в заблуждение. Обычно rm -rf удаляет все в каталоге, поэтому не имеет значения, пустой он или нет.

В этом случае вы можете проверить некоторые вещи:

  • Попробуйте посмотреть, есть ли что-нибудь смонтированное в этом каталоге с помощью df -h , и при необходимости размонтируйте
  • Попробуйте проверить, есть ли файл, открытый приложением, запустив sudo lsof foo , и выйдите из приложения, если это необходимо.
  • Попробуйте sudo rm -rf foo - возможно, у вас просто нет прав (хотя я не думаю, что это так)
  • Попробуйте выйти и снова войти
  • Попробуйте перезагрузить машину
0

Команда

 rm -rf dir

не удаляет скрытые файлы, т.е. те, которые начинаются с точки, как, например, .bashrc. Каталог не пустой диагностический означает, что у вас есть некоторые скрытые файлы, вы можете перечислить их с помощью

 ls -a

или ит

 ls .*

Вы можете стереть их рекурсивно с

 rm -rf .[a-Z]*

тогда вы сможете rmdir поврежденного каталога.

РЕДАКТИРОВАТЬ:

Следующее Правило подтверждает мою точку зрения:

  root@rasal:/tmp# mkdir ttp
  root@rasal:/tmp# cd ttp
  root@rasal:/tmp/ttp# touch .test
  root@rasal:/tmp/ttp# ls -a
  .  ..  .test
  root@rasal:/tmp/ttp# rm -rf *
  root@rasal:/tmp/ttp# ls -a
  .  ..  .test
  root@rasal:/tmp/ttp# 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .