0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

特定ファイルのフルパスからカレントディレクトリまでのパスを削る方法

Posted at

今回はShellScript向けのちょっとしたテクニックを発見したので、備忘録と共有を兼ねて紹介します。

用途

かなり限定的な使用用途になりそうですが、カレントディレクトリの中にあるディレクトリ内に存在するファイルのフルパスから、カレントディレクトリから該当ファイルのパスのみを抽出したい時に使用します。
例えばfile.txtのフルパスが/home/USER/workdir/file.txtとなっている状態で、/workdir/file.txtの部分のみ必要になった時に、/home/USERを取り除きたい場合に使用します。

Shell中身

# !/bin/sh

if [ $# != 1 ]; then
 echo "引数を1つ指定してください"
 exit 1
fi

DIRCNT=`pwd | wc -m`
FILEPASS=`echo $1 | cut -c $DIRCNT-`

echo $FILEPASS

exit 0

上記シェルを/home/USERの中で作成し、./<シェルスクリプト名> /home/USER/workdir/file.txtという書式で実行すると、カレントディレクトリ直下のディレクトリ名から対象ファイルまでのパス/workdir/file.txtが返ってきます。

解説

まず最初のif文については、引数を指定していないか2つ以上指定された場合に処理を中断するためのものです。
次に変数DIRCNTについては、カレントディレクトリまでの文字数を代入しています。wc -mコマンドは通常テキストファイルの文字数を表示するコマンドですが、コマンド実行結果の文字数を返すこともできます。
これにより例えば/home/USERの場合は、10文字なので、DIRCNTの中には10という数値が格納されます。

最後にFILEPASS変数には、引数として指定された、対象ファイルへのフルパスに対して、cutコマンドで指定した文字数を削ります。
cut -cコマンドに指定した引数ですが、指定方法は<先頭文字数>-<終端文字数>となっており、先程10を格納した変数DIRCNTを先頭文字数として指定していますが、終端文字数には何も指定していません。これにより先頭文字数として指定した10文字、すなわち/home/USERの部分はカットされ、終端文字数を指定していないので、それ以降の文字数(つまり/workdir/file.txtまで)が表示されるようになります。

今回は1つのファイル分しか表示できないのであまり使いみちはなさそうですが、次回はこれを応用したシェルを紹介しようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?