List all files and directories in the current directory separated by commas and sorted by crtime


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers List all files and directories in the current directory separated by commas and sorted by crtime
# 1  
Old 03-04-2019
List all files and directories in the current directory separated by commas and sorted by crtime

What I know so far:
ls -A will list all files except those starting with a dot
ls -d will list all directories
ls -m will separate contents by commas
For getting crtimes use:
stat filename will give me the inode number
or
ls -i filename will give me the inode number
Code:
df -h

will give me the root partition
Then I can use:
Code:
sudo debugfs -R 'stat <inode>' root partion | grep crtime

to get the crtime

I need to know how to tie all of this together.

Moderator's Comments:
Mod Comment Please wrap your codes/samples in CODE and ICODE TAGS, as per forum rules.

Last edited by RavinderSingh13; 03-04-2019 at 08:26 AM..
# 2  
Old 03-04-2019
Hi, try so
Code:
ls -cm

--- Post updated at 14:39 ---

what does this word mean "crtime" ?

--- Post updated at 14:50 ---

option -c in the ls command sorts files by the time of their last modification, but if this is a directory, then this is the time of the last modification of files in it.
# 3  
Old 03-04-2019
Quote:
Originally Posted by nezabudka
Hi, try so
Code:
ls -cm

--- Post updated at 14:39 ---

what does this word mean "crtime" ?

--- Post updated at 14:50 ---

option -c in the ls command sorts files by the time of their last modification, but if this is a directory, then this is the time of the last modification of files in it.
Hi nezabudka,
For file systems that keep track of it, "crtime" refers to the time at which a file was created.

The last modification time (sometimes just called "mtime") of a directory is usually the time that the directory was created, the last time a link to a file was created in that directory, or the last time a link to a file was removed from that directory, whichever occurred most recently. But, of course, it can also be set to an arbitrary time at least by the C language futimens( ), utimensat( ), and utimes() functions. Changing the size of an already existing file in a directory does not change the modification time of any directory that contains that file.

Note that if a file has multiple hard links (not symlinks), that single file can exist in more than one directory.
This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 03-04-2019
I won't address all points because i am a bit short on time today. It suffices for addressing one point, though:

Quote:
Originally Posted by chstewar
ls -d will list all directories
No. What -d does is it will not follow a directory. That means if you use a wildcard (or, more precisely, a "file glob") like this:

Code:
ls foo*

The shell will - prior to calling ls - expand the glob into a list of filesystem items matching this name. filesystem items can be all sorts of things but we are here interested only in files and directories. So, lets say for example that there are three such items, fooA, fooB and fooC. If these are all files the output would simply be:

Code:
$ ls foo*
fooA fooB fooC

So far, so good. But what happens if one of these is a directory? In this case the directory would be followed, which means all the files in this directory would be displayed too, i.e.

Code:
$ ls foo*
fooA

fooB:
 fileinfooB1 fileinfooB2

fooC:
fileinfooC1 fileinfooC2

Notice that this is not the fault of the shell: the shell still generates only the list of the three filenames but ls, when it sees the name of a directory, will list the files in that directory. In this case obviously fooB and fooC must be directories. This makes sense because when you enter

Code:
ls /usr

You usually want to see what is in that directory, not just the directory name itself. But sometimes one would not want that and this is why -d exists. It will make the ls NOT follow the directories and display their files but only there names as if they would be normal files.

I hope this helps.

bakunin
# 5  
Old 03-13-2019
I have been able to make some progress on the problem. I found a partial solution, but I can't
post the links yet.

Here is the code:
Code:
xstat() {
  for target in "${@}"; do
    inode=$(ls -di "${target}" | cut -d ' ' -f 1)
    fs=$(df "${target}"  | tail -1 | awk '{print $1}')
    crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | 
    grep -oP 'crtime.*--\s*\K.*')
    printf "%s\t%s\n" "${crtime}" "${target}"
  done
}

I made a change to the printf statement to:
Code:
printf "%s %s, " "${crtime}" "{target}"

With this change I get a comma separated list of crtime (creation time) and names of the files
in the current directory.
The problem with this is that the files are not sorted by crtime.

I found code that solved the sort problem, but I don't know how to change the printf statements to get a comma separted list of crtime and name:

Here is the code I found:
Code:
crtime-at() {
for target in *; do
inode=$(ls -di "${target}" | cut -d ' ' -f 1)
fs=$(findmnt -n -o SOURCE --target "${target}")
crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | 
grep -oP 'crtime.*--\s*\K.*')
crtime=$(date -d "${crtime}" +%Y-%m-%d\ %H:%M:%S)
printf "%s\t%s\n" "${crtime}" "${target}" >> /tmp/crtime
done
crtime=$(sort -t$'\t' -k1 -n /tmp/crtime)
printf "${crtime}"
rm /tmp/crtime
echo
}

The second program sorts by crtime, but I don't know enough about
Bash programming to figure out how to get i displayed as a comma separated list.

If anyone understands this code and has the time to explain it line by line, I believe it
will help me as well as the community.

Thanks for all the responses.

Charles
# 6  
Old 03-13-2019
Hmm I clearly must be missing something. Late to the party again...
stat command will do what you want without sudo.

%w is the human readable format for crtime
%W is the format for epoch seconds for crtime -- which you use for sorting.
Code:
$ stat --format "%W, %w, %n" t.lis
1440371010, 2015-08-23 17:03:30.103891500 -0600, t.lis

So, this may be what you want: get three fields, sort by field one (crtime), print readable crtime and file name with comma separated data. Change the awk printf to what you want. Seemed a bit confusing to me.

Code:
cd /path/to/files
 stat --format "%W, %w, %n" * | sort -n -k1 | awk -F ',' '{ printf("%s, %s", $2, $3)}' > /path/to/output/file

# 7  
Old 03-13-2019
This looked promising and even the manpage for stat seems to agree, but when I enter the commands in ubuntu, all I get is:
-, filename
for each file.

Maybe I'm doing something wrong?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Finding non-existing words in a list of files in a directory and its sub-directories

Hi All, I have a list of words (these are actually a list of database table names separated by comma). Now, I want to find only the non-existing list of words in the *.java files of current directory and/or its sub-directories. Sample list of words:... (8 Replies)
Discussion started by: Bhanu Dhulipudi
8 Replies

2. UNIX for Advanced & Expert Users

Find all files in the current directory excluding hidden files and directories

Find all files in the current directory only excluding hidden directories and files. For the below command, though it's not deleting hidden files.. it is traversing through the hidden directories and listing normal which should be avoided. `find . \( ! -name ".*" -prune \) -mtime +${n_days}... (7 Replies)
Discussion started by: ksailesh1
7 Replies

3. UNIX for Dummies Questions & Answers

List the directories, having given pattern in the directories name, sorted by creation date

It is for HP-Unix B.11.31. Requirement: 1. List the directories, having given pattern in the directories name, sorted by creation date. Example: Directories with name "pkg32*" or "pkg33*" 2. On the output of 1. list the directories by creation date as sort order, with creation date... (2 Replies)
Discussion started by: Siva SQL
2 Replies

4. Shell Programming and Scripting

Find specific files only in current directory...not sub directories AIX

Hi, I have to find specific files only in the current directory...not in the sub directories. But when I use Find command ... it searches all the files in the current directory as well as in the subdirectories. I am using AIX-UNIX machine.Please help.. I am using the below command. And i am... (2 Replies)
Discussion started by: aakishore
2 Replies

5. Shell Programming and Scripting

How to list all the files, directories and sub-directories in the current path except one directory?

Can anyone come up with a unix command that lists all the files, directories and sub-directories in the current directory except a folder called log.? Thank you in advance. (7 Replies)
Discussion started by: Manjunath B
7 Replies

6. Emergency UNIX and Linux Support

List matching directories in current folder only on AIX

Hi, I need to find the list of matching direcories in current folder only and no subfolders on AIX.I tried -maxdepth option but its not working. Also, tried ls -d option to list the matching directories but getting argument list too long... So, any help would be appreciated. (6 Replies)
Discussion started by: sachinkl
6 Replies

7. Shell Programming and Scripting

List files in the current directory - BOURNE SHELL

i am trying to write a program, that will list .txt files and .png files. it will ask the user what type of files do they want to list! so if the user inputs txt files.. how would you list all the .txt files in the current directory (the directory the program is running)!! thanks (1 Reply)
Discussion started by: bshell_1214
1 Replies

8. Shell Programming and Scripting

mget * (obtein files from current directory but not the files form sub-directories)

Hello, Using the instruction mget (within ftp) and with "Interactive mode off", I want to get all files from directory (DirAA), but not the files in sub-directories. The files names don't follow any defined rule, so they can be just letters without (.) period Directory structure example: ... (0 Replies)
Discussion started by: Peter321
0 Replies

9. Shell Programming and Scripting

Finding files in current directory when 100,000's files in current directory

Hi All I was wondering what is the most efficient way to find files in the current directory(that may contain 100,000's files), that meets a certain specified file type and of a certain age. I have experimented with the find command in unix but it also searches all sub directories. I have... (2 Replies)
Discussion started by: kewong007
2 Replies

10. UNIX for Dummies Questions & Answers

List files that are not directories from current directory

I can't manage to list all files that are not directories from current directory. (2 Replies)
Discussion started by: beni22sof
2 Replies
Login or Register to Ask a Question