shell - Trimming path to latest arbitrary folder name -


i'm writing makefile have access path file running. mkfile_path.

mkfile_path= $(abspath $(lastword $(makefile_list)))

i want trim path, cutting off end last packages.

here examples:

  • input: /users/thomasreggi/desktop/monorepo/packages/event-as-promised/packages/node_modules/.bin/ied
  • output: /users/thomasreggi/desktop/monorepo/packages/event-as-promised

  • imput: /users/thomasreggi/desktop/monorepo/packages/event-as-promised/node_modules/.bin/ied

  • output: /users/thomasreggi/desktop/monorepo

how can manipulate path shell / make?

we can use parameter subsitution remove shortest matching part right end of string this:

$ var="/users/thomasreggi/desktop/monorepo/packages/event-as-promised/packages/node_modules/.bin/ied" $ echo "${var%packages*}" /users/thomasreggi/desktop/monorepo/packages/event-as-promised/ $ var="/users/thomasreggi/desktop/monorepo/packages/event-as-promised/node_modules/.bin/ied" $ echo "${var%packages*}" /users/thomasreggi/desktop/monorepo/ 

${var%pattern} means remove $var shortest part of pattern matches end(from right) of $var.

to remove longest matching part can use ${var%%pattern}.

more info on parameter substitution can found here