terminal question

buc99

Don't Tread on Me!
I have a directory with alot of html files in it. I want to redirect the output of the ls command to a file:

ls > filename

The only problem is this leaves the .html filetype on each name in the list. Does anyone out there know how I can redirect the output of ls to a file without having any of the .html filetypes on each name in the list?

Thanks in advance:)
SA
 
I did man ls and got the following
LS(1) System Reference Manual LS(1)

NAME
ls - list directory contents

SYNOPSIS
ls [-ACFLRSTWacdfgiklnoqrstux1] [file ...]

DESCRIPTION
For each operand that names a file of a type other than directory, ls
displays its name as well as any requested, associated information. For
each operand that names a file of type directory, ls displays the names
of files contained within that directory, as well as any requested, asso-
ciated information.

If no operands are given, the contents of the current directory are dis-
played. If more than one operand is given, non-directory operands are
displayed first; directory and non-directory operands are sorted sepa-
rately and in lexicographical order.

The following options are available:

-A List all entries except for `.' and `..'. Always set for the su-
per-user.

-C Force multi-column output; this is the default when output is to
a terminal.

-F Display a slash (/) immediately after each pathname that is a di-
rectory, an asterisk (*) after each that is executable, an at
sign (@) after each symbolic link, a percent sign (%) after each
whiteout, an equal sign (=) after each socket, and a vertical bar
(|) after each that is a FIFO.

-L If argument is a symbolic link, list the file or directory the
link references rather than the link itself.

-R Recursively list subdirectories encountered.

-S Sort by size, largest file first.

-T Display complete time information for the file, including month,
day, hour, minute, second, and year.

-W Display whiteouts when scanning directories.

-a Include directory entries whose names begin with a dot (.).

-c Use time when file status was last changed for sorting or print-
ing.

-d Directories are listed as plain files (not searched recursively)
and symbolic links in the argument list are not indirected
through.

-f Output is not sorted.

-g Does nothing; kept for compatibility with older versions of
ls(1).

-i For each file, print the file's file serial number (inode num-
ber).

-k Modifies the -s option, causing the sizes to be reported in kilo-

bytes.

-l (The lowercase letter ``ell.'') List in long format. (See be-
low.) If the output is to a terminal, a total sum for all the
file sizes is output on a line before the long listing.

-n Display the user and group IDs numerically rather than converting
to a user or group name in a long (-l) output.

-o Include the file flags in a long (-l) output.

-q Force printing of non-graphic characters in file names as the
character `?'; this is the default when output is to a terminal.

-r Reverse the order of the sort to get reverse lexicographical or-
der or the smallest or oldest entries first.

-s Display the number of file system blocks actually used by each
file, in units of 512 bytes, where partial units are rounded up
to the next integer value. If the output is to a terminal, a to-
tal sum for all the file sizes is output on a line before the
listing.

-t Sort by time modified (most recently modified first) before sort-
ing the operands by lexicographical order.

-u Use time of last access, instead of last modification of the file
for sorting (-t) or printing (-l).

-x Multi-colum

Don't see anything very helpful. I was hoping that some script guru out there would have something.

Thanks,:)
SA
 
You just want something that removes ".html" from each file listing, yes? Try this:

ls -l | perl -p -e "s/\.html//g" > listing.txt

The resulting file, "listing.txt", should have what you're looking for. You can remove the -l flag from the ls command to leave out all the other details -- I wasn't sure exactly what you were looking for here.

Matt
 
I was going to say

ls | cut -d "." -f 1 > outfile

but that always prints whatever comes before the first ".", so if you had
file.name.html
it would just come out as
file

One of these days I really must learn perl...
 
For those of you who are curious about what that command really does, here's a localized explanation of the perl involved:

command:
ls -l | perl -p -e "s/\.html//g" > listing.txt

The results of ls -l are piped to perl, which is given two flags: -p and -e. -p tells perl to expect input and process it, and then to print the result to stdout. -e tells perl to execute the following code.

The code itself is a single command, s. s means "replace", and it gets three parts as arguments: what to look for, what to replace it with, and option flags. You can use basically any dividers you want to separate these parts; here, I used forward slashes. So the first argument says, "look for .html" (with the . escaped, since . is a special character in regular expressions), the second part says, "replace it with nothing", and the third part, the flag g, means "global", or, "don't stop with just one -- do this replacement every time you have a match."

Then the results get redirected to a file, listing.txt.
 
Back
Top