Linux CLIで現在のディレクトリからの相対パスでファイルを再帰的に一覧表示する

StackOverflow https://stackoverflow.com/questions/245698

  •  05-07-2019
  •  | 
  •  

質問

これはこの質問が、私はUNIXの現在のディレクトリへの相対パスを含めたい。次の場合:

ls -LR | grep .txt

フルパスは含まれません。たとえば、次のディレクトリ構造があります。

test1/file.txt
test2/file1.txt
test2/file2.txt

上記のコードは以下を返します:

file.txt
file1.txt
file2.txt

標準のUnixコマンドを使用して、現在のディレクトリからの相対パスを含めるにはどうすればよいですか?

役に立ちましたか?

解決

検索を使用:

find . -name \*.txt -print

ほとんどのGNU / Linuxディストリビューションのように、GNU findを使用するシステムでは、-printを省略できます。

他のヒント

-f (フルパス)および -i (インデント行なし)で tree を使用します:

tree -if --noreport .
tree -if --noreport directory/

その後、 grep を使用して、必要なものを除外できます。


コマンドが見つからない場合は、インストールできます:

次のコマンドを入力して、RHEL / CentOSおよびFedora linuxにツリーコマンドをインストールします。

# yum install tree -y

Debian / Ubuntuを使用している場合、Mint Linuxはターミナルで次のコマンドを入力します。

$ sudo apt-get install tree -y

find を試してください。マニュアルページで正確に調べることができますが、次のようなものです:

find [開始ディレクトリ] -name [検索対象]

例の場合

find。 -name" *。txt"

必要なものを提供する必要があります。

代わりにfindを使用できます:

find . -name '*.txt'

これはトリックです:

ls -R1 $ PWD | lを読みながらケース$ l in * :) d = $ {l%:} ;; "")d = ;; *)echo" $ d / $ l&quot ;;; esac;完了| grep -i" .txt"

しかし、それは" sinning&quot ;;ただし、 ls の解析では、GNUおよびGhostscriptコミュニティによって不適切な形式と見なされます。

DIR=your_path
find $DIR | sed 's:""$DIR""::'

'sed'は、すべての「検索」結果から「your_path」を消去します。そして、「DIR」パスに関連して受信します。

findコマンドを使用して目的のファイルの実際のフルパスファイル名を取得するには、pwdコマンドで使用します。

find $(pwd) -name \*.txt -print

Perlスクリプトは次のとおりです。

sub format_lines($)
{
    my $refonlines = shift;
    my @lines = @{$refonlines};
    my $tmppath = "-";

    foreach (@lines)
    {
        next if (

Perlスクリプトは次のとおりです。

ls -LR | perl format_ls-LR.pl

使用法:

<*> =~ /^\s+/); if (

Perlスクリプトは次のとおりです。

<*>

使用法:

<*> =~ /(^\w+(\/\w*)*):/) { $tmppath = $1 if defined $1; next; } print "$tmppath/

Perlスクリプトは次のとおりです。

<*>

使用法:

<*>"; } } sub main() { my @lines = (); while (<>) { push (@lines,

Perlスクリプトは次のとおりです。

<*>

使用法:

<*>); } format_lines(\@lines); } main();

使用法:

<*>

シェル関数を作成できます。 .zshrc または .bashrc で:

filepath() {
    echo $PWD/$1
}

filepath2() {
    for i in $@; do
        echo $PWD/$i
    done
}

最初のものは、明らかに単一のファイルでのみ動作します。

&quot; filename&quot;というファイルを見つけます。ルートディレクトリ&quot; /&quot;から検索を開始するファイルシステムで。 &quot;ファイル名&quot;

find / -name "filename" 

出力にファイルサイズなどのlsの詳細を保存する場合は、これが機能するはずです。

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file

このようにこの機能を実装できます
まず、lsコマンドを使用してターゲットディレクトリを指定しました。後でfindコマンドを使用して、結果をフィルタリングします。 あなたの場合、それは次のように聞こえます-常にファイル名は単語で始まります file ***。txt

ls /some/path/here | find . -name 'file*.txt'   (* represents some wild card search)

fish シェルでは、現在のディレクトリ内のPDFを含むすべてのPDFを再帰的に一覧表示することができます:

$ ls **pdf

任意のタイプのファイルが必要な場合は、「pdf」を削除するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top