В 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]%/*}
, чтобы изменить путь ко второму файлу.
Некоторые примечания к приведенной выше команде:
Можно ли запустить другую команду как часть оператора find
?
find -name testfile -exec othercommand {} \;
{}
- это путь, который был найден. Аргументы для -exec
должны заканчиваться точкой с запятой, ;
, но вам нужно экранировать это в bash с помощью обратной косой черты, \
.
В этом примере будут изменены права доступа для каждого найденного файла:
find -name testfile -exec chmod 755 {} \;