これは この質問 に似ていますが、現在のディレクトリからの相対パスをunixに含めたいと思います。私が次のようにすれば:
ls -LR | grep .txt
フルパスは含まれていません。たとえば、次のようなディレクトリ構造があります。
test1/file.txt
test2/file1.txt
test2/file2.txt
上記のコードは戻ります:
file.txt
file1.txt
file2.txt
標準のUNIXコマンドを使用して、現在のディレクトリに対する相対パスを含めるにはどうすればよいですか。
Findを使う:
find . -name \*.txt -print
ほとんどのGNU/LinuxディストリビューションのようにGNU findを使うシステムでは、-printを省略することができます。
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
find
を試してください。あなたはまさしくmanページでそれを調べることができます、しかしそれはこのようなsortaです:
find [start directory] -name [what to find]
あなたの例ではそう
find . -name "*.txt"
あなたが欲しいものをあなたにあげるべきです。
代わりにfindを使うことができます:
find . -name '*.txt'
それがトリックです:
ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"
しかし、GNUやGhostscriptコミュニティではこれは悪い形式と考えられていますが、ls
の構文解析で "罪を犯す"ことによってそれを実現しています。
DIR=your_path
find $DIR | sed 's:""$DIR""::'
'sed'はすべての 'find'結果から 'your_path'を消去します。そして、あなたは 'DIR'パスに関連して受け取ります。
Findコマンドを使用して目的のファイルの実際のフルパスファイル名を取得するには、pwdコマンドと一緒に使用します。
find $(pwd) -name \*.txt -print
ルートディレクトリ "/"から検索を開始して、ファイルシステム上で "filename"というファイルを見つけます。 「ファイル名」
find / -name "filename"
あなたはShell関数を作成することができます。あなたの.zshrc
または.bashrc
で:
filepath() {
echo $PWD/$1
}
filepath2() {
for i in $@; do
echo $PWD/$i
done
}
最初のものは、明らかに単一のファイルに対してのみ動作します。
これが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
あなたがあなたの出力にファイルサイズ等のようなlsと共に来る詳細を保存したいならば、これはうまくいくはずです。
sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file
このような機能を実装することができます
まず、lsコマンドを使用して、目的のディレクトリを指定しました。後でfindコマンドを使用して、そこから結果をフィルタリングします。あなたのケースからは、それはのように聞こえます - 常にファイル名はWordのfile***.txt
で始まります
ls /some/path/here | find . -name 'file*.txt' (* represents some wild card search)
fish シェルでは、カレントディレクトリにあるものも含めて、すべてのpdfを再帰的にリストするためにこれを行うことができます。
$ ls **pdf
あなたが任意の種類のファイルが欲しいならば、ちょうど 'pdf'を削除してください。