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


Login or Register to Reply

 
Thread Tools Search this Thread
# 1  
Old 2 Weeks Ago
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; 2 Weeks Ago at 06:26 AM..
# 2  
Old 2 Weeks Ago
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 2 Weeks Ago
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:
nezabudka (2 Weeks Ago)
# 4  
Old 2 Weeks Ago
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 1 Week Ago
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 1 Week Ago
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 1 Week Ago
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 Reply

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
How to create a summary file of all files in a directory sorted in reverse alphabetical order.? Braveheart UNIX for Beginners Questions & Answers 4 11-28-2016 03:17 PM
Finding non-existing words in a list of files in a directory and its sub-directories Bhanu Dhulipudi Shell Programming and Scripting 8 01-12-2016 08:35 AM
Find all files in the current directory excluding hidden files and directories ksailesh1 UNIX for Advanced & Expert Users 7 02-03-2014 05:09 AM
List the directories, having given pattern in the directories name, sorted by creation date Siva SQL UNIX for Dummies Questions & Answers 2 05-05-2013 12:45 AM
Shell Code required -Output in Multiple Rows to be in single row separated by Commas - manishK Shell Programming and Scripting 4 04-07-2013 12:33 PM
Find specific files only in current directory...not sub directories AIX aakishore Shell Programming and Scripting 2 11-28-2012 10:40 PM
How to list all the files, directories and sub-directories in the current path except one directory? Manjunath B Shell Programming and Scripting 7 09-13-2012 10:00 AM
List matching directories in current folder only on AIX sachinkl Emergency UNIX and Linux Support 6 02-24-2012 04:13 AM
List files in the current directory - BOURNE SHELL bshell_1214 Shell Programming and Scripting 1 09-20-2011 03:59 AM
List directories and sub directories recursively excluding files pointers UNIX for Dummies Questions & Answers 3 02-23-2011 08:39 PM
mget * (obtein files from current directory but not the files form sub-directories) Peter321 Shell Programming and Scripting 0 03-12-2009 11:59 AM
Finding files in current directory when 100,000's files in current directory kewong007 Shell Programming and Scripting 2 02-26-2009 02:13 PM
List files that are not directories from current directory beni22sof UNIX for Dummies Questions & Answers 2 01-06-2009 02:44 PM
shell-init: could not get current directory: getcwd: cannot access parent directories babu.knb Solaris 6 10-03-2008 10:11 AM
searching content of files in the current and sub directories tiger99 Shell Programming and Scripting 4 01-23-2008 02:11 AM