Как безопасно удалить все файлы с определенным расширением (например, .bak
) из текущего каталога и всех подпапок, используя одну командную строку? Просто я боюсь использовать rm
, так как однажды использовал это неправильно, и теперь мне нужен совет.
ამ შემთხვევაში rm
გამოყენება არც გჭირდებათ, თუ გეშინიათ. გამოიყენეთ იპოვეთ
:
find . -name "*.bak" -type f -delete
მაგრამ გამოიყენეთ იგი სიფრთხილით. პირველი გაუშვით:
find . -name "*.bak" -type f
რომ ნახოთ, კონკრეტულად რომელ ფაილებს ამოიღებთ.
ასევე, დარწმუნდით, რომ -delete
არის უკანასკნელი არგუმენტი თქვენს ბრძანებაში. თუ ამას დააყენებთ -name * .bak არგუმენტამდე
, ის წაშლის ყველაფერს .
იხილეთ man find
and man rm
დამატებითი ინფორმაციისთვის და აგრეთვე ამ კითხვაზე იხილეთ SE:
find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f
პირველი გაუშვით ბრძანება shopt -s globstar
. ამის გაშვება შეგიძლიათ ბრძანების სტრიქონზე და ის იმოქმედებს მხოლოდ იმ გარსის ფანჯარაში. თქვენ შეგიძლიათ განათავსოთ ის თქვენს .bashrc
- ში, შემდეგ კი ყველა ახლად დაწყებული ჭურვი აიღებს მას. ამ ბრძანების მოქმედებაა ** /
ფაილების რეკურსიულად დალაგება მიმდინარე დირექტორიაში და მის ქვე დირექტორიებში (სტანდარტულად, ** /
ნიშნავს იგივე, რაც * /
:მხოლოდ უშუალო ქვეწარმოებებში). შემდეგ:
rm **/*.bak
(ან gvfs-trash ** / *. Bak
ან რა გაქვთ).
ფაილების წაშლა ჩემთვის არ არის ისეთი რამ, რაც თქვენ გჭირდებათ გამოიყენეთ rm
ამისთვის. აქ არის ალტერნატივა:
sudo apt-get install gvfs # install a tool that allows you to put stuff in the trash
alias "trash"="gvfs-trash" # you can also put this in .bash_aliases or simply use the command without alias
trash *.bak # trash the files (thus moving them to the trash bin)
როგორც ფლიმი აღნიშნავს კომენტარებში:
პაკეტი
trash-cli
აკეთებს იგივე რამეს, რაცgvfs-trash
gvf- ზე დამოკიდებულების გარეშე.
ასე რომ:
sudo apt-get install trash-cli
ამისათვის საჭირო არ არის ზედმეტსახელის გაკეთება, რადგან trash-cli
პაკეტი გთავაზობთ ბრძანებას ნაგავი
, რომელიც აკეთებს იმას, რაც ჩვენ გვინდა.
როგორც ელია კაგანი განმარტავს ვრცელ კომენტარებში, ასევე შეგიძლიათ გააკეთოთ ეს რეკურსივი find
. ამ შემთხვევაში ვერ გამოიყენებთ მეტსახელად, ამიტომ ქვემოთ მოცემული ბრძანებების თანახმად, თქვენ დააინსტალირეთ trash-cli
. მე შევაჯამებ ელიას კომენტარებს:
ეს ბრძანება პოულობს და აჩვენებს ყველა .bak
ფაილებს და ბმულებს სადმე მიმდინარე დირექტორიაში ან მის ქვე დირექტორიებში ან ქვემოთ.
find . -name '*.bak' -xtype f
მათი წასაშლელად დაამატეთ -exec
ნაგვის
ბრძანებით:
find . -name '*.bak' -xtype f -exec trash {} +
-xtype f
ირჩევს ფაილებს და ფაილების ბმულებს, მაგრამ არა საქაღალდეებს. .Bak საქაღალდეების წასაშლელად, წაშალეთ ის ნაწილი და გამოიყენეთ -execdir
, რომელიც თავიდან აიცილებს არ შეუძლია წაშლილი არ იყოს
შეცდომების .bak
ფაილების შიგნით .bak
დირექტორიები:
find . -name '*.bak' -execdir trash {} +
Если вы хотите удалить все файлы определенного типа, но только 1 папку "глубоко" из текущей папки:
find . -maxdepth 2 -name "*.log" -type f -delete
-maxdepth 2 , потому что текущий каталог ". "считается первой папкой.
Если вы находитесь в git-репо, вы можете использовать:
git clean -fdx
Это удаляет неотслеживаемые файлы и файлы в .gitignore.
Рекурсивно удалить все файлы с заданным именем или постфиксом:
найти. -name '* .pyc' -type f -delete
Рекурсивно удалить все каталоги с заданным именем:
find ~ -path '* / __ pycache __ / *' -delete
find ~ -type d -name '__pycache__' -empty -delete
Несколько менее жестко, но в одной строке:
find ~ -path '* / __ pycache __ *' -delete
[ ПРИМЕЧАНИЕ ]:
d
- это параметр каталога, а f
- параметр файла.
Если вы хотите проверить список перед удалением файлы, вы можете повторить его.
find . -name "*.bak" -type f | xargs echo rm -rf
Будет выведен список результатов поиска, которые передаются команде rm через xargs. Если вы уверены в списке, вы можете отбросить эхо в приведенной выше команде.
find . -name "*.bak" -type f | xargs rm -rf
Перед использованием rm
вы можете сначала перечислить все файлы с этим расширением.
Например,
ls *.bak
Если вы получили только те файлы, которые хотите удалить, вы можете использовать rm
rm *.bak