Как видите, я создал для тестирования следующую структуру:
mkdir test && cd test && touch file1 file2 file3 lol test2
touch -t 200805101024 file*
, получив это:
ls -la
total 8
drwxr-xr-x 2 root root 4096 Oct 13 18:09 .
drwxr-xr-x 4 phphil phphil 4096 Oct 13 18:09 ..
-rw-r--r-- 1 root root 0 May 10 2008 file1
-rw-r--r-- 1 root root 0 May 10 2008 file2
-rw-r--r-- 1 root root 0 May 10 2008 file3
-rw-r--r-- 1 root root 0 Oct 13 18:09 lol
-rw-r--r-- 1 root root 0 Oct 13 18:09 test2
И после выполнения вашей правильной команды:
find . -type f -mtime +5 ! -name 'test2' -exec rm -f {} \;
Ситуация ожидаемая:
ls -la
total 8
drwxr-xr-x 2 root root 4096 Oct 13 18:09 .
drwxr-xr-x 4 phphil phphil 4096 Oct 13 18:09 ..
-rw-r--r-- 1 root root 0 Oct 13 18:09 lol
-rw-r--r-- 1 root root 0 Oct 13 18:09 test2
Изменить: поиск информации о командах или параметрах команд:
Когда я не уверен в поведении определенной команды и / или параметра, я действую следующим образом:
man find | less
, тогда вы можете искать то, что вы ищете в руководстве по команде, как показано ниже:
/
-mtime
N
, или к предыдущему, набрав n
Я нашел эту интересную информацию:
-mtime n {{1 }} В последний раз данные файла были изменены n * 24 часа назад. См. Комментарии к -atime, чтобы понять, как round - ing влияет на интерпретацию времени модификации файла.
С ksh
илиbash -O extglob
(или после shopt -s extglob
в сценарии bash
)илиzsh -o kshglob
(или после set -o kshglob
в сценарии zsh
):
VG_MY=${VG_MY//+(=)+([0-9])+(=)/}
+(...)
представляет собой расширенный глобус ksh, аналогичный оператору расширенного регулярного выражения +
. +(x)
соответствует одному или нескольким x
с.
Таким образом, вышеприведенное удаляет все последовательности из одного или нескольких =
, за которыми следует одна или несколько десятичных цифр, за которыми следует одна или несколько =
, как sed -E 's/=+[0-9]+=+//g'
¹.
Не то чтобы 456==
не удалось удалить внутри ==123====456==
, поскольку первая замена удалит ==123====
, оставив что-то, что не соответствует шаблону. Чтобы иметь возможность удалить их, вы можете изменить его на:
VG_MY=${VG_MY//+(=)[0-9]*([0-9=])=/}
(нравитсяsed -E 's/=+[0-9][0-9=]*=//g'
)
С собственными расширенными глобусами zsh
(zsh -o extendedglob
):#
является эквивалентом ERE *
и ##
ERE+
(и (#c1,3)
из{1,3}
). Итак, вы можете сделать:
set -o extendedglob
VG_MY=${VG_MY//=##[0-9]##=##/}
¹ Обратите внимание, что хотя некоторые реализации sed
поддерживают -E
для расширенных регулярных выражений, это еще не стандарт, и иногда вы можете найти некоторые реализации, которые его не поддерживают. С ними вы можете пропустить -E
и использовать \{1,\}
в качестве замены BRE для+
(или использовать ==*
вместо=+
).
Просто удалите ==94953==
в начале каждой строки перед сравнением результатов:
valgrind --leak-check=full./executable1 <inputfile 2>&1 | sed 's/^==[0-9]*== //' >output1
valgrind --leak-check=full./executable2 <inputfile 2>&1 | sed 's/^==[0-9]*== //' >output2
diff -u output1 output2
В качестве альтернативы, которая позволяет сохранять немодифицированный вывод и изменять его только при запуске diff
,
valgrind --leak-check=full./executable1 <inputfile >output1 2>&1
valgrind --leak-check=full./executable2 <inputfile >output2 2>&1
diff -u <( sed 's/^==[0-9]*== //' <output1 ) <( sed 's/^==[0-9]*== //' <output2 )