Как удалить файл, созданный в определенную дату ??удалить конкретную дату
ls -ltr | grep "Nov 22" | rm
- почему это не wrking ??
Как удалить файл, созданный в определенную дату ??удалить конкретную дату
ls -ltr | grep "Nov 22" | rm
- почему это не wrking ??
Есть три проблемы с вашим кодом:
rm
берет свои аргументы из командной строки, но вы не передаете любое имя файла на командная строка. Вы передаете данные на стандартный ввод, но rm
не читает это¹. Есть способы обойти это.ls -ltr | grep "Nov 22"
состоит не только из имен файлов, но и состоит из mangled имен файлов плюс куча другой информации, такой как время.Nov 22
, среди прочих. Он также не будет ловить файлы, которые вы хотите, в локали, которая отображает даты по-разному.Команда find
позволяет вам искать файлы в соответствии с такими критериями, как их имя, соответствующее определенному шаблону, или дата их нахождения в определенном диапазоне. Например, следующая команда будет перечислять файлы в текущем каталоге и его подкаталогах, которые были изменены сегодня (по дате календаря по Гринвичу). Замените echo
на rm --
после того, как вы проверили, что у вас есть нужные файлы.
find . -type f -mtime -2 -exec echo {} +
С GNU найти, например, найти на Linux и Cygwin, есть несколько вариантов, которые могли бы сделать лучше:
-maxdepth 1
(должен быть указан перед другими критериями) ограничивает поиск указанный каталог (то есть он не рекурсирует).-mmin -43
соответствует файлам, измененным не более 42 минут назад.-newermt "Nov 22"
соответствует файлам, измененным 22 ноября или позднее, по местному времени.Таким образом:
find . -maxdepth 1 -type f -newermt "Nov 22" \! -newermt "Nov 23" -exec echo {} +
или, сокращенно дополнительно:
find -maxdepth 1 -type f -newermt "Nov 22" \! -newermt "Nov 23" -delete
С Zsh, то m
glob qualifier ограничивает шаблон для файлов модифицированных в пределах определенного относительного диапазона дат. Например, *(m1)
расширяет файлы, измененные за последние 24 часа; *(m-3)
расширяет файлы, измененные за последние 48 часов (сначала число дней округляется до целого числа, тогда -
обозначает строгое неравенство); *(mm-6)
расширяет файлы, измененные за последние 5 минут и так далее.
¹ rm -i
(и простой rm
только для чтения-файлов) использует его для чтения подтверждения y
перед удалением.
Вы бы лучше подходит для использования find
команду:
find . -type f -mtime 1 -exec echo rm {} +
Это удалит все файлы один день старые в текущем каталоге и рекурсии вниз в его подкаталогах. Вы можете использовать '0', если хотите удалить файлы, созданные сегодня. Как только вы удовлетворены результатом, удалите echo
, и файлы будут действительно удалены.
спасибо за ответ Siegex, но можете ли вы сказать мне, что wats the prblm с моим кодом – nachikethas 2010-11-23 10:01:50
Если вам нужно попытаться найти в любой день,
это может помочь
touch -d "2010-11-21 23:59:59" /tmp/date.start;
touch -d "2010-11-23 00:00:00" /tmp/date.end;
find ./ -type f -newer /tmp/date.start ! -newer /tmp/date.end -exec rm {} \;
Terminate -exec с `+` вместо `\;`, и вы получите повышение производительности, когда вы сопоставляете много файлов, поскольку оно ведет себя просто как `xargs` в этом отношении. – SiegeX 2010-11-23 17:11:25
Это будет работать
rm `ls -ltr | grep "Nov 22" | awk '{print $8}'`
Как насчет пробелов в именах файлов? – khachik 2010-11-23 15:04:16
Хорошая точка ~ awk '{print $ 8 "\\" $ 9}' может работать для простых случаев, но это рискованно. Сначала я предпочел бы заменить пробелы в именах файлов. – gerry 2010-11-23 15:27:03
Самое худшее, что вы можете сделать, это попытаться разобрать ls, а вторая хуже, что вы можете сделать, - попытаться удалить файл на основе разбора ls. См. [Почему я не должен анализировать ls] (http://mywiki.wooledge.org/ParsingLs) – SiegeX 2010-11-23 17:03:57
Если ваш find
поддерживает ее, как GNU find
делает, вы можете использование:
find -type f -newermt "Nov 21" ! -newermt "Nov 22" -delete
, который будет искать файлы, которые были изменены в ноябре 21.
Проблема с вашим кодом заключается в том, что `rm` не принимает ввода на stdin (через канал), вы должны передать файлы для удаления в качестве аргументов. – SiegeX 2010-11-23 10:19:01