简体   繁体   中英

Listing directories with tab as delimiter

When we list files in unix using ls -l command the output is a table with space as a separator, for example the following

(jupyter-lab) ➜  mylab ls -l
total 2
drwxr-sr-x. 2 hs0424 ragr  0 Feb  1 12:17 A bad directory
drwxr-sr-x. 2 hs0424 ragr  0 Feb  1 12:18 A very bad directory

I want to convert to a tab separated file ( .tsv ), just changing spaces to \t , such as ls -l | sed -E 's/ +/\t/g' ls -l | sed -E 's/ +/\t/g' would not work since filenames contain spaces. Do we have better solution?

Hard to show expected output with tabs but if we use \t as a replacement of tab, I want something as follows,

(jupyter-lab) ➜  mylab ls -l
total 2
drwxr-sr-x.\t2\ths0424\tragr\t0\tFeb 1\t12:17\tA bad directory
drwxr-sr-x.\t2\ths0424\tragr\t0\tFeb 1\t12:18\tA very bad directory

(Edit 1) We can assume access to GNU tools

Use GNU find -printf or stat , either of which let you provide an arbitrary format string, instead of ls .

find . -mindepth 1 -maxdepth 1 -printf '%M\t%y\t%g\t%G\t%u\t%U\t%f\t%l\n'

or

# for normal cases
stat --printf='%A\t%G\t%g\t%U\t%u\t%n\n' *

# for directories where filenames could exceed command line length limit
printf '%s\0' * | xargs -0 stat --printf='%A\t%G\t%g\t%U\t%u\t%n\n'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM