Сошлитесь на путь в выходных результатах 'находки'

[1129386] Вызовите мипрограмму [1129774] времени[1129775].[12123] Здесь указывается время настенных часов, время пользователя и системное время. Время пользователя - это время, затраченное процессом на вычисления. Если программа многопоточная и машина имеет несколько процессоров, то время, затраченное на все процессоры, суммируется (поэтому для достаточно параллельной программы время пользователя может быть больше, чем время настенных часов). Системное время - это время, проведенное в ядре, т.е. на входе/выходе.[12124]Это столько же близко к "времени не считая помех от других выполняющихся программ". Единственный способ узнать, сколько времени потребовалось бы программе с настенными часами, если бы не было параллельных программ, - это запустить ее без других параллельных программ[1129391].
2
17.09.2014, 23:48
2 ответа

В bash, если переменная имеет значение полного пути к файлу (например, /home/spider/src/myscript.py), вы можете использовать манипуляции с переменными, чтобы получить базовое имя и имя каталога.

Так, например:

filepath='/home/spider/src/myscript.py'

filename=${filepath##*/}
echo $filename
myscript.py

path=${filepath%/*}
echo $path
/home/spider/src

Встроенная команда чтения Bash, поддерживает чтение из стандартного ввода в массив с параметром -a, поэтому вы можете использовать это:

IFS='$\n' read -d '' -a files < <(find . -name testfile -type f)

Переменные массива оболочки теперь содержат все файлы с их путями . Используя предыдущие конструкции манипуляции строкой оболочки, теперь вы можете сделать

cd ${files[2]%/*}

, чтобы изменить путь ко второму файлу.

Некоторые примечания к приведенной выше команде:

  • option -d '' (помните о пробеле между -d и '') выберите нулевой символ в качестве разделителя для чтения.
  • параметр -a, как показано выше, считывает стандартный ввод в индексированный массив (в данном случае называемый 'files')
  • <<(команда) перенаправляет вывод команды между <(и) в стандартный Вход. Это удобно для чтения, к которому вы не можете подключиться.
  • Я добавил '-type f' к команде find, чтобы убедиться, что вы получаете только файлы
  • Для справки операнды обработки строк в bash
  • Вы можете использовать basename (1) и dirname ( 1) для той же цели, но они порождают новый процесс, поэтому они немного менее эффективны.
0
27.01.2020, 23:10

Можно ли запустить другую команду как часть оператора find ?

find -name testfile -exec othercommand {} \;

{} - это путь, который был найден. Аргументы для -exec должны заканчиваться точкой с запятой, ; , но вам нужно экранировать это в bash с помощью обратной косой черты, \ .

В этом примере будут изменены права доступа для каждого найденного файла:

find -name testfile -exec chmod 755 {} \;
-1
27.01.2020, 23:10

Теги

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