У меня есть каталог как это:
<folder1>
<folder2>
<folder3>
file1
file2
file3
То, какова команда комнаты как этот, удаляет только file1, file2, file3, но оставляет folder1, folder2 и folder3 и их содержание нетронутый?
rm
не удалит каталоги по умолчанию. Таким образом в Вашем примере, принятие Вы находитесь в родительском каталоге , и это - все файлы, все, в чем Вы нуждаетесь:
rm *
Это - опасная команда. , Если Вы забываете, где Вы, команда как этот может вытереть важный $HOME
файлы, вытереть загрузку фотографий, отменить Рождество, и т.д., и т.д., и т.д. Удостоверьтесь, что Вы знаете то, что *
выбирает перед выполнением его. echo *
хороший способ протестировать расширение.
А нормальный человек, которому предоставляют file1 file2 file3
, мог бы работать rm file*
или rm file{1..3}
, чтобы использовать часть кода расширения Bash и не поймать любых отставших, о которых Вы не думали в переходной помехе.
Для удаления каталогов необходимо указать также:
-d
для удаления пустых каталогов, или -r
для рекурсивного удаления файлов и их каталогов. Как @Oli сказал в его ответ
<час>, комната не удалит каталоги по умолчанию.
, Но Вы могли также использовать find
find . -maxdepth 1 -type f -exec rm "{}" \;
или с шаблоном поиска
find . -maxdepth 1 -type f -name "a*" -exec rm "{}" \;
<час> Пример
% tree
.
├── a
├── b
├── bar
│ ├── a
│ └── b
└── foo
├── a
└── b
% find . -maxdepth 1 -type f -exec rm "{}" \;
% tree
.
├── bar
│ ├── a
│ └── b
└── foo
├── a
└── b
или с шаблоном поиска
% find . -maxdepth 1 -type f -name "a*" -exec rm "{}" \;
% tree
.
├── b
├── bar
│ ├── a
│ └── b
└── foo
├── a
└── b