Удалить все файлы, кроме некоторых, из каталога - PullRequest
203 голосов
/ 01 декабря 2010

Как использовать sudo rm -r, как удалить все файлы, кроме следующих:

textfile.txt
backup.tar.gz
script.php
database.sql
info.txt

Ответы [ 18 ]

4 голосов
/ 11 августа 2017

Просто:

rm $(ls -I "*.txt" ) #Deletes file type except *.txt

Или:

rm $(ls -I "*.txt" -I "*.pdf" ) #Deletes file types except *.txt & *.pdf
4 голосов
/ 08 декабря 2015

Попытка сработала с:

rm -r !(Applications|"Virtualbox VMs"|Downloads|Documents|Desktop|Public)

, но имена с пробелами (как всегда) жесткие.Пробовал также с Virtualbox\ VMs вместо кавычек.Он всегда удаляет этот каталог (Virtualbox VMs).

1 голос
/ 11 апреля 2018

Сделать файлы неизменяемыми. Даже root не сможет удалить их.

chattr +i textfile.txt backup.tar.gz script.php database.sql info.txt
rm *

Все остальные файлы были удалены.
В конце концов вы можете сбросить их изменяемыми.

chattr -i *
0 голосов
/ 27 января 2017

Вы можете сделать это с двумя последовательностями команд.Сначала определите массив с именами файлов, которые вы не хотите исключать:

files=( backup.tar.gz script.php database.sql info.txt )

После этого просмотрите все файлы в каталоге, который вы хотите исключить, проверив, находится ли имя файла в массиве, который выне хочу исключать;если нет, то удалите файл.

for file in *; do
  if [[ ! " ${files[@]} " ~= "$file"  ]];then
    rm "$file"
  fi
done
0 голосов
/ 01 января 2013

Вместо того, чтобы идти по прямой команде, пожалуйста, переместите необходимые файлы во временный каталог за пределы текущего каталога.Затем удалите все файлы, используя rm * или rm -r *.

Затем переместите необходимые файлы в текущий каталог.

0 голосов
/ 11 апреля 2018

Поскольку никто еще не упомянул об этом, в одном конкретном случае:

OLD_FILES=`echo *`
... create new files ...
rm -r $OLD_FILES

(или просто rm $OLD_FILES)

или

OLD_FILES=`ls *`
... create new files ...
rm -r $OLD_FILES

Возможно, вам придется использовать shopt -s nullglob, если некоторые файлы могут быть там или нет:

SET_OLD_NULLGLOB=`shopt -p nullglob`
shopt -s nullglob
FILES=`echo *.sh *.bash`
$SET_OLD_NULLGLOB

без nullglob, echo *.sh *.bash может дать вам «a.sh b.sh * .bash».

(Сказав все это, я сам предпочитаю этот ответ , хотя он не работает в OSX)

0 голосов
/ 08 сентября 2018

Удалить все, кроме файла. Name:

ls -d /path/to/your/files/* |grep -v file.name|xargs rm -rf
0 голосов
/ 24 февраля 2015

Это похоже на комментарий от @ siwei-shen, но вам нужен флаг -o для создания нескольких шаблонов. Флаг -o обозначает 'или'

find . -type f -not -name '*ignore1' -o -not -name '*ignore2' | xargs rm

...