bash - видаліть усі каталоги (та вміст), але не файли в pwd


19

Я хотів би видалити всі каталоги з pwd, але залишити файли в pwd самому. Якщо вміст мого pwd:

mydir1
mydir2
myfile1
myfile2

тоді я хотів би залишитися з просто

myfile1
myfile2

Я припускаю, що мені потрібно користуватися rm -r -i

Я прав?

Відповіді:


10

Ні, це не дасть вам "відсутнього операнда", оскільки ви нічого не вказали. Введення *запиту також підкаже також для файлів.

Я б спробував:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

Захист mindepth 1буде виключено .з результатів, maxdepth 1виключатиме спроби робити в каталогах, які все одно будуть видалені (тому створюється попередження). Але на практиці ви можете залишити їх обох, якщо погодитись на кілька «невинних» попереджень.


21

Я його десь знайшов:

rm -r */

Здається, найлегший шлях. Зі свого прикладу вам доведеться підтверджувати кожен випадок, якщо у вас є 5 файлів, це нормально, але при більш великих файлових структурах інтерактивний режим - це не шлях ... Просто як пропозиція, якщо це важлива інформація, зробіть резервне копіювання ...


1
Це також переходитиме до символічних посилань, що, напевно, тут не бажано.
JdeBP

8

Використовуйте

rm -rf ./*/

Це дозволяє уникнути інтерактивного режиму, видаляє лише каталоги у вашому локальному каталозі.


Як JdeBP вказував на дуже подібну відповідь Мартіна , якщо поточний каталог верхнього рівня містить символічні посилання на інші каталоги, вони також будуть видалені (навіть якщо вони не знаходяться в поточному каталозі або підпорядковані йому).
Скотт


-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.