web-dev-qa-db-ja.com

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

これは この質問 に似ていますが、現在のディレクトリからの相対パスをunixに含めたいと思います。私が次のようにすれば:

ls -LR | grep .txt

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

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

上記のコードは戻ります:

file.txt
file1.txt
file2.txt

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

212
Darryl Hein

Findを使う:

find . -name \*.txt -print

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

288
Andru Luvisi

tree-f(フルパス)と-i(インデント行なし)と共に使用します。

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

それからgrepを使って必要なものを除外することができます。


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

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

# yum install tree -y

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

$ Sudo apt-get install tree -y
70
Stephen Irons

findを試してください。あなたはまさしくmanページでそれを調べることができます、しかしそれはこのようなsortaです:

find [start directory] -name [what to find]

あなたの例ではそう

find . -name "*.txt"

あなたが欲しいものをあなたにあげるべきです。

25
Sam Hoice

代わりにfindを使うことができます:

find . -name '*.txt'
9
Sherm Pendley

それがトリックです:

ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

しかし、GNUやGhostscriptコミュニティではこれは悪い形式と考えられていますが、lsの構文解析で "罪を犯す"ことによってそれを実現しています。

5
El Guesto
DIR=your_path
find $DIR | sed 's:""$DIR""::'

'sed'はすべての 'find'結果から 'your_path'を消去します。そして、あなたは 'DIR'パスに関連して受け取ります。

4
h-dima

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

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

ルートディレクトリ "/"から検索を開始して、ファイルシステム上で "filename"というファイルを見つけます。 「ファイル名」

find / -name "filename" 
1
user2101432

あなたはShell関数を作成することができます。あなたの.zshrcまたは.bashrcで:

filepath() {
    echo $PWD/$1
}

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

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

1
rwilhelm

これがPerlスクリプトです。

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

    foreach (@lines)
    {
        next if ($_ =~ /^\s+/);
        if ($_ =~ /(^\w+(\/\w*)*):/)
        {
            $tmppath = $1 if defined $1;    
            next;
        }
        print "$tmppath/$_";
    }
}

sub main()
{
        my @lines = ();

    while (<>) 
    {
        Push (@lines, $_);
    }
    format_lines(\@lines);
}

main();

使用法:

ls -LR | Perl format_ls-LR.pl
1
Eric Keller

あなたがあなたの出力にファイルサイズ等のようなlsと共に来る詳細を保存したいならば、これはうまくいくはずです。

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

このような機能を実装することができます
まず、lsコマンドを使用して、目的のディレクトリを指定しました。後でfindコマンドを使用して、そこから結果をフィルタリングします。あなたのケースからは、それはのように聞こえます - 常にファイル名はWordのfile***.txtで始まります

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

fish シェルでは、カレントディレクトリにあるものも含めて、すべてのpdfを再帰的にリストするためにこれを行うことができます。

$ ls **pdf

あなたが任意の種類のファイルが欲しいならば、ちょうど 'pdf'を削除してください。

0
rien333