Я не рекомендую пытаться написать правило для исключения определенных файлов. Что я, скорее всего, сделаю, так это попытаюсь найти либо файловую маску/глобус, либо какую-то другую привязку в именах файлов, которые вы хотите удалить, которых нет в файлах, которые вы хотите сохранить. В большинстве случаев вы, вероятно, могли бы сделать это путем расширения. К сожалению, поскольку вы не упомянули имена файлов, я не могу вам помочь более конкретно.
Что-то вроде двух (или более) циклов поиска: -
find *.mp3 d.mp3 -maxdepth 1 -type f | while read mp3s
do
mv $mp3s ~/d.stuff-to-keep
done
find *.txt d.mp3 -maxdepth 1 -type f while read textfiles
do
rm -v $textfiles
done
Если нет, поищите другую общую характеристику файлов. Если его нет, вам может потребоваться переименовать свои файлы, чтобы получить его. Я всегда помещаю множество привязок (отдельные поля имен, расширения и т. д.) в свои имена файлов, потому что таким образом у меня есть много разных способов делать с ними то, что мне нужно. Мой обычный формат имени: -
<extension>.+<author>+<year>+<work-name>+<volume-number>+<number-of-volumes>
Знаки «плюс» — это разделители полей, тире — пробелы, но без тире в качестве первого или последнего символа. Все буквы нижнего регистра и никакие управляющие символы или другие не буквенно-цифровые символы разрешены. В результате я могу вырезать их с помощью awk, cut или чего-то еще, что мне может понадобиться, и легко переименовать их. Помещение расширения в начале имени также означает, что ls нужен только один флаг (-l), чтобы получить идеально упорядоченную файловую систему.
Если вы знаете, как использовать свою структуру каталогов в качестве базы данных с помощью основных инструментов POSIX, вам иногда не нужно будет устанавливать что-то более сложное, чтобы делать то, что вы хотите.
У вас есть ограничение на количество длинных символов в именах файлов в UNIX, а также автозавершение с помощью табуляции для навигации по длинным именам. Не бойтесь свободно использовать оба из них.
person
petrus4
schedule
05.11.2013
rm !(filename1|filename2) -rf
нормально работает вне скрипта? Вместо этого я ожидалrm -rf !(filename1|filename2)
(с опцией перед операндами). - person ruakh   schedule 05.11.2013rm
после файлов. Может быть, это немного непоследовательно, но это всегда работало для меня. @mario вам не нужно переключаться обратно в каталог с помощьюcd -
, потому что при выполнении вашего скрипта используется подоболочка. - person EverythingRightPlace   schedule 05.11.2013