переместите поисковое содержание в другой каталог

В зависимости от то, что Вы хотите сделать Вас, может использовать 1,2 или 3

из https://www.kernel.org/doc/Documentation/sysctl/vm.txt

drop_caches

Запись в это заставит ядро отбрасывать чистые кэши, dentries и inodes из памяти, заставляя ту память стать бесплатной.

Освободить pagecache:

echo 1 > /proc/sys/vm/drop_caches

Освободить dentries и inodes:

echo 2 > /proc/sys/vm/drop_caches

Освободить pagecache, dentries и inodes:

echo 3 > /proc/sys/vm/drop_caches

Поскольку это - неразрушающая операция, и грязные объекты не freeable, пользователь должен выполнить 'синхронизацию' сначала.

3
28.06.2014, 01:09
1 ответ

Из ksh, bash или /usr/xpg4/bin/sh, предполагая, что имена файлов не содержат символов новой строки, вы можете использовать оператор split+glob на выходе grep -l (-l to list the files that match).

Этот оператор вызывается, оставляя замену команды (`...` или $(...)) не заключенным в кавычки. Здесь мы настраиваем его специальной переменной $IFS, чтобы сказать, какой символ мы хотим разделить на (здесь символ новой строки), и отключая часть glob с набором -f:

IFS='
'
set -f
mv $(set +f; grep -l searchstring filename*) ../mydir/

(мы восстанавливаем глобус внутри подстановки команды (которая выполняется в подоболочке) для расширения имени файла *).

Можно упростить до:

mv $(grep -l searchstring filename*) ../mydir/

Если вы знаете, что имена файлов не содержат пробелов, табуляции, новой строки, символов *, ? или [. Вышеуказанное разбиение производится на символы newline, пробел и tab (что является значением по умолчанию $IFS), и глобус выполняется на каждое слово, полученное в результате этого разбиения (но это не проблема, если ни одно из имен файлов не содержит символов подстановки символов).

Если вы не можете гарантировать, что имена файлов не будут содержать символов новой строки, вы можете использовать цикл вместо этого:

for f in filename*; do
  grep -q searchstring "$f" && mv "$f" ../mydir/
done
3
27.01.2020, 21:23

Теги

Похожие вопросы