2012-01-01 2 views
-1

Say со структурой каталогов, таких как:Unix - удалить только файлы из каталога

toplev/ 
     file2.txt 
     file5.txt 
     midlev/ 
      test.txt 
      anotherdirec/ 
         other.dat 
         myfile.txt 
         furtherdown/ 
            morefiles.txt 
         otherdirec/ 
            myfile4.txt 
            file7.txt 

Как удалить все файлы (не папки, а не рекурсивно) из «anotherdirec»? В этом примере было бы удалить 2 файла (other.dat, Myfile.txt)

Я пробовал следующую команду из каталога «midlev», но он дает эту ошибку (find: bad option -maxdepth find: [-H | -L] path-list predicate-list):

find anotherdirec/ -type f -maxdepth 1 

Я запускаю SunOS 5.10.

+0

ли вы хотите удалить скрытые файлы? (.hidden.txt) – BatchyX

+0

@BatchyX - Нет, ничего не удаляйте, кроме не скрытых файлов – toop

+1

[man rm?] (http://duckduckgo.com/?q=man+rm) – TLP

ответ

5
rm anotherdirec/* 

должно работать на вас.

+0

не будет выше команда также удаляет «дальнейший путь каталогов» и «otherdirec» в примере, указанном пользователем, о котором идет речь? Я думаю, что вы имели в виду 'rm anotherdirec /*.*' – peakit

+2

no, bare 'rm' without flags не будет' rmdir', хотя glob 'anotherdirec/*' будет соответствовать 'anotherdirec/futherdown',' rm' не удалит его , – msw

+0

Спасибо за разъяснение @msw! – peakit

3

Поиск чувствителен к порядку опций. Попробуйте это:

find anotherdirec/ -maxdepth 1 -type f -exec rm {} \; 
+0

по-прежнему дает: " find: bad option -maxdepth find: [-H | -L] список предикатов списка путей" – toop

+2

@Arenielle 'find' имеет вариант с именем '-delete'. Если вы используете его, вам не нужен '-exec ...'. И если у вас много файлов, find 'delete' будет быстрее :) – uzsolt

+0

@toop Для SunOS 5.10 -maxdepth не является допустимым вариантом. Вы должны проконсультироваться с manpages, применимыми к вашей конкретной ОС. Http://compute.cnr.berkeley.edu/cgi-bin/man-cgi?find+1 – JRFerguson

4

ответ Роба (гт anotherdirec/*) вероятно, будет работать, но это немного многословным и генерирует кучу сообщений об ошибках. Проблема в том, что вы используете версию find, которая не поддерживает параметр -maxdepth. Если вы хотите, чтобы избежать сообщения об ошибках, которые «гт anotherdirec/*» дает, вы можете просто сделать:

 
for i in anotherdirec/*; do test -f $i && rm $i; done 

Обратите внимание, что ни одно из этих решений будет работать, если любой из этих файлов содержат пробелы или другие специальные символы. Вы можете поместить двойные кавычки вокруг $ i, если это проблема.

1

rm toplev/midlev/anotherdirec/* Если вы хотите удалить только файлы.

rm -rf toplev/midlev/anotherdirec/*, если вы хотите удалить файлы и нижние каталоги

Смежные вопросы