Мне нравится делать примерно следующее:
#!/bin/sh
for i in filename_*.txt; do echo "$i"; done |
sed "s/filename_\([0-9]*\)\([0-9]\{3\}\)\.txt/mv -i 'filename_\1\2.txt' '\2_filename_\1\2.txt'/g"
Это выводит список команд mv
для выполнения задачи. Если он выводит правильные команды, то просто добавьте | sh
в конце команды sed, чтобы заставить оболочку выполнить их.
Этот сценарий использует команду замены sed
s
и функцию обратной ссылки для использования частей совпавшего регулярного выражения в строке замены.
s/regex/replacement/
Части шаблона регулярного выражения между \(
и \)
могут быть использованы в строке замены по \N
, где in - число.
Текущий рабочий каталог, т.е. :/home/dev/other
dir=$PWD
Родительский каталог
parentdir="$(dirname "$dir")"`
Вzsh
:
dir=$PWD:h
Подобно dirname
, это удаляет один компонент каталога с конца $PWD
. Когда $PWD
равно /
, $dir
становится /
подобно dirname
.
Одно преимущество перед
dir=$(dirname -- "$PWD")
заключается в том, что он все еще работает, если имя каталога $PWD
заканчивается символами новой строки.
Обратите внимание, что это не обязательно родительский каталог для текущего каталога. Например, если $PWD
равно /tmp
, а /tmp
является символической ссылкой на /var/tmp
, родительским каталогом текущего каталога будет /var
, а не /
. Чтобы получить родительский каталог, вы можете сделать:
dir=$PWD/..
dir=$dir:P
или:
dir=$PWD:P:h
(модификатор :P
делает $dir
каноническим путем (разрешает все символические ссылки, .
и ..
компоненты, такие как GNUreadlink -f
)).
Или POSIXly:
dir=$(cd -P.. && pwd -P)
В любом случае обратите внимание, что $PWD
внутри скрипта не имеет ничего общего с путем к скрипту. Если вам нужен родительский каталог каталога, содержащего скрипт, это будет $0:P:h:h
в zsh
.
попробуйте следующий код,
dirname "$(pwd)"
Вы можете использовать
dir=${PWD%/*} # or: dir=$( dirname "$PWD" )
или
dir="$PWD/.."
или
dir=".."
В первом случае переменная PWD
, содержащая текущий рабочий каталог, используется для получения пути к каталогу на один уровень выше путем удаления последнего /
и всего, что следует за ним.
Во втором случае переменная PWD
используется для простого создания пути к указанному выше каталогу с помощью ..
.
В третьем случае мы просто обращаемся к указанному выше каталогу, используя относительный путь от текущего каталога.
Выбор альтернативы зависит от того, для чего вы собираетесь использовать путь.
Примеры:
$ echo $PWD
/tmp/shell-sh.jAtMYgn0
$ dir=${PWD%/*}
$ echo "$dir"
/tmp
$ dir="$PWD/.."
$ echo "$dir"
/tmp/shell-sh.jAtMYgn0/..
$ dir=".."
$ echo "$dir"
..
Наконец, это было так же просто, как:current=$(dirname "$(pwd)")