আমি কীভাবে আমার `ls` কমান্ডটি সংশোধন করতে পারি?


12

আমি যখন টাইপ করি তখন আমি lsসাধারণ তালিকাটি পাই বা আমি যখন টাইপ ls -laকরি তখন সমস্ত কিছু সহ বিশদ বিবরণ পাই ...

তবে আমি lsলেআউটটিকে ঘৃণা করি , এটি আমার বেশিরভাগ ব্যবহারের জন্য অপ্রয়োজনীয়।

আমি কীভাবে কিছু সংশোধন করতে পারি (এর সোরস্কোড পরিবর্তন না করেই ls, ব্যাশ স্ক্রিপ্টগুলি ঠিক আছে) lsসুতরাং এটির পরিবর্তে প্রদর্শন করা হবে

-rwxr-xr-x 13 user group 123546 2011-01-01 11:11 filename0
-rwxr-xr-x 13 user group 123546 2011-01-01 11:11 filename1
-rwxr-xr-x 13 user group 123546 2011-01-01 11:11 filename2
drwx------ 13 user group 123546 2011-01-01 11:11 directory0
-rwxr-xr-x 13 user group 123546 2011-01-01 11:11 filename3
drwx------ 13 user group 123546 2011-01-01 11:11 directory1

আমি আরও একটি তালিকা পেতে পারি:

DIRS
directory0 1293880260 700 user:group
directory1 1293880260 700 user:group

FILES
filename0 1293880260 751 user:group
filename1 1293880260 755 user:group
filename2 1293880260 777 user:group
filename3 1293880260 705 user:group

বা অন্য কিছু প্রকরণ।

এদিকে, পতাকা এবং অন্যান্য বিকল্পগুলি ব্যবহারের ক্ষমতা সংরক্ষণ করা।

উত্তর:


15

আপনি একটি বাশ স্ক্রিপ্ট লিখতে পারেন ~/bin/lsযা ওভাররাইড করা উচিত /bin/ls। চালাতে মনে আছে chmod +x ~/bin/ls

আমি সবেমাত্র এটি লিখেছি যা মনে হয় আপনি যা করতে চান তার বেশিরভাগই করায় (অতিরিক্ত যুক্তি সহকারে পাঠানো সহ)

#!/bin/bash

DIRS="`/bin/ls --color=auto -l $@ | grep ^d`"
FILES="`/bin/ls --color=auto -l $@ | grep ^\-`"

if [ "$DIRS" ]
then
    echo "DIRECTORIES"
    echo -e "$DIRS\

"
fi

if [ "$FILES" ]
then
    echo "FILES"
    echo "$FILES\

"
fi

কেউ হয়ত সামান্য কিছুটা পরিষ্কার করতে বা আউটপুট ফর্ম্যাটিং উন্নত করতে চায় তবে আপনি সেখানে যান। আপনার সাথে যা খুশি তাই করুন।

এবং এখানে কিছু আসল নমুনা আউটপুট:

ls
DIRECTORIES
drwxr-xr-x 4 oli oli     4096 2010-12-16 15:40 markitup
drwxr-xr-x 7 oli oli     4096 2011-01-16 16:58 media
drwxr-xr-x 3 oli oli     4096 2010-12-16 15:41 post
drwxr-xr-x 9 oli oli     4096 2010-09-16 05:23 templates

FILES
-rw-r--r-- 1 oli oli  5361664 2010-09-06 16:32 db.db
-rw-r--r-- 1 oli oli        0 2008-12-11 09:22 __init__.py
-rwxr-xr-x 1 oli oli      542 2008-12-11 09:22 manage.py
-rw-r--r-- 1 oli oli       13 2010-03-23 18:14 settingsdev.py
-rw-r--r-- 1 oli oli     2642 2010-12-16 15:40 settings.py
-rw-r--r-- 1 oli oli     1818 2010-12-16 15:40 urls.py
-rw-r--r-- 1 oli oli      432 2010-06-22 20:54 views.py

এবং যুক্তি সহ:

ls -a
DIRECTORIES
drwxr-xr-x  8 oli oli     4096 2011-01-12 00:46 .
drwxr-xr-x 19 oli oli     4096 2011-04-13 17:24 ..
drwxr-xr-x  6 oli oli     4096 2010-02-03 13:50 .bzr
drwxr-xr-x  4 oli oli     4096 2010-12-16 15:40 markitup
drwxr-xr-x  7 oli oli     4096 2011-01-16 16:58 media
drwxr-xr-x  3 oli oli     4096 2010-12-16 15:41 post
drwxr-xr-x  9 oli oli     4096 2010-09-16 05:23 templates

FILES
-rw-r--r--  1 oli oli       65 2010-03-27 07:58 .bzrignore
-rw-r--r--  1 oli oli  5361664 2010-09-06 16:32 db.db
-rw-r--r--  1 oli oli        0 2008-12-11 09:22 __init__.py
-rwxr-xr-x  1 oli oli      542 2008-12-11 09:22 manage.py
-rw-r--r--  1 oli oli       13 2010-03-23 18:14 settingsdev.py
-rw-r--r--  1 oli oli     2642 2010-12-16 15:40 settings.py
-rw-r--r--  1 oli oli     1818 2010-12-16 15:40 urls.py
-rw-r--r--  1 oli oli      432 2010-06-22 20:54 views.py

7

এটি আমার দ্রুত জাব এখানে।

$ function lss { ls -l --group-directories-first --time-style +%s $@ | grep -v '^total' | awk 'BEGIN {print("DIRS")} {if (f!=1 && $1 ~ /^-/) {print "\nFILES"; f=1}; printf("%s\t%s %s %s:%s\n", $7, $6, $1, $3, $4);}'; }
$ alias ls='lss'
$ ls
DIRS
directory0  1305901476 drwxr-xr-x ak:ak
directory1  1305901476 drwxr-xr-x ak:ak

FILES
filename0   1305901484 -rw-r--r-- ak:ak
filename1   1305901484 -rw-r--r-- ak:ak
filename2   1305901484 -rw-r--r-- ak:ak
filename3   1305901484 -rw-r--r-- ak:ak

এই পদ্ধতির সুবিধা হ'ল এটির জন্য একাধিক ডিরেক্টরি ট্র্যাভারসালগুলির প্রয়োজন হয় না এবং এটি প্রস্তুত হওয়ায় আউটপুট মুদ্রণ করে। এটি touch filename{0..10000}পরীক্ষা হিসাবে পরে চালানোর চেষ্টা করুন ।

এটিকে স্থায়ী করার জন্য functionএবং aliasলাইনগুলি ড্রপ করুন ~/.bashrc

অলি থেকে বেঞ্চমার্কিং:

oli@bert:~/Desktop$ mkdir test
oli@bert:~/Desktop$ cd test
oli@bert:~/Desktop/test$ mkdir dir{0..100000}
oli@bert:~/Desktop/test$ touch filename{0..100000}

oli@bert:~/Desktop/test$ time /bin/ls>/dev/null

real    0m0.975s
user    0m0.860s
sys         0m0.110s

oli@bert:~/Desktop/test$ time ls --group-directories-first -l >/dev/null

real    0m1.810s
user    0m1.210s
sys         0m0.580s


oli@bert:~/Desktop/test$ time lss>/dev/null  # ændrük's method

real    0m2.035s
user    0m1.810s
sys         0m0.780s

oli@bert:~/Desktop/test$ time ~/bin/ls>/dev/null  # Oli's method

real    0m5.496s
user    0m4.290s
sys         0m1.460s

4
আপনার পোস্টে কিছু বেঞ্চমার্কিং যুক্ত হয়েছে (যেমন আপনি এটি উল্লেখ করেছেন)। হ্যাঁ 100,000 এরও বেশি ডিরেক্টরি এবং 100,000 ফাইল, আপনার অর্ধেকেরও কম সময় নেয়। তবে lsনিজস্বভাবে এখনও অনেক দ্রুত। যেভাবেই হোক না কেন, এটি একটি প্রান্তের কেস। বেশিরভাগ মানুষের কাছে কখনও এ জাতীয় বিশাল ডিরেক্টরি তালিকা থাকে না। সাধারণ মানুষের জন্য, লক্ষ্যযোগ্য পার্থক্য খুব কম। awkযদিও ভাল লাগছে। +1 টি
অলি

4

ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

ক্রমানুসারে ... ডিরেক্টরি, সাধারণ ফাইল, লিঙ্কগুলি দেখায়।

এটি একটি উপাধি করুন এবং আপনি যেতে প্রস্তুত।

অন্য একটি পদ্ধতি পাওয়া গেছে:

ls -l --color -h --group-directories-first

এটি প্রথমে ডিরেক্টরিগুলি করে এবং ফাইলের নামগুলি রঙ করে।

ইন ~/.bashrcআপনি এখন মত এই কমান্ড উপনাম তৈরি করতে পারেন:

alias ls1='ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"

নমুনা আউটপুট:

drwxr-xr-x 5 96 2011-05-20 13:41।
drwxr-xr-x 16 xxxx uuuu 96 2010-03-05 12:34 ..
drwx ------ 2 xxxx uuuu 96 2009-02-13 14:31 .ssh
drwxrwxr-x 2 xxxx uuuu 96 2009-12-03 13:49 .xxx
drwxrwxr-x 5 xxxx uuuu 96 2010-12-06 15:51 এক্সএক্সএক্সএক্সএক্সএক্সএক্স
-আরউ ------- 1 এক্সএক্সএক্সএক্স ইউউউউ 05 2011-05-20 14:12 .বাশ_ইস্টরি
-আরড-আর - r-- 1 এক্সএক্সএক্সএক্স ইউউউউ 20 2009-02-12 09:33 .ব্যাশ_লগআউট
-আরড-আর - r-- 1 এক্সএক্সএক্সএক্স ইউউউউ 29 2009-03-06 11:47 .বাশার্ক
-rw-r - r-- 1 xxxx uuuu 80 2011-05-20 13:42 fff
-rw-rw-r-- 1 xxxx uuuu 03 2011-05-18 10:21 dffff

বা দ্বিতীয়টির জন্য: alias ls2=ls -l --color -h --group-directories-first

নমুনা আউটপুট:

drwxrwxr-x 5 xxxx uuuu 4.0K 2010-12-06 15:51 ডিডিডিডি
-আরডব্লিউ - আর - 1 এক্সএক্সএক্সএক্স ইউউউ 339 এম 2011-05-20 13:42 এসএসএস
-rw-rw-r-- 1 xxxx uuuu 4.6M 2011-05-18 10:21 dxsssss
-rwxrwxr-x 1 xxxx uuuu 68 2011-02-22 15:55 5555
-rwxr - r-- 1 xxxx uuuu 20K 2010-12-06 16:11 ffff
ddddd অন্য রঙ হতে হবে। -aলুকানো ফাইল অন্তর্ভুক্ত করতে যোগ করুন ।

এবং এটি করার জন্য আপনি ls1 এবং ls2 কমান্ড তৈরি করেছেন।


2

.Bashrc এ উলেফ সেটিংস প্রসারিত করা আরও সুবিধাজনক 'ls' কমান্ড পাওয়ার জন্য আমার পছন্দসই উপায়। আমি বিশেষত 'এলএফ' পছন্দ করি ('গাছের ইনস্টলেশন প্রয়োজন)।

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias lf='tree -d -L 1'

2

ইউনিক্স সিস্টেমে অন্যতম শক্তিশালী সরঞ্জাম হ'ল findকমান্ড। আমরা এটি পতাকা lsসহ আউটপুট অনুকরণ করতে -lsএবং -typeপতাকা সহ ফাইলের ধরণের দ্বারা অনুসন্ধান করতে পারি । সুতরাং, আপনি যা বেলো দেখছেন তা হুবহু একই আদেশ, তবে findদুটি ভিন্ন ধরণের সন্ধানের সাথে । printfবিবৃতি কেবল আপনাকে বলে যে এটি প্রথমে তালিকা তৈরি করতে চায়।

printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls

এখানে নমুনা আউটপুট:

CURRENT DIR:[/home/xieerqi/bin]
$ printf "****DIRS****"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls                                 
****DIRS****
5795516    4 drwxrwxr-x   8 xieerqi  xieerqi      4096 Aug 19 16:25 .
5795514    4 drwxrwxr-x   2 xieerqi  xieerqi      4096 Aug 19 15:27 ./c
5795511    4 drwxrwxr-x   2 xieerqi  xieerqi      4096 Aug 19 15:27 ./python
5795153    4 drwxrwxr-x   2 xieerqi  xieerqi      4096 Aug 19 15:41 ./perl
5795532    4 drwxrwxr-x   2 xieerqi  xieerqi      4096 Aug 19 15:27 ./random
5795531    4 drwxrwxr-x   2 xieerqi  xieerqi      4096 Aug 19 15:27 ./sh
5795141    4 drwxrwxr-x   2 xieerqi  xieerqi      4096 Aug 19 15:27 ./cs2
****FILES****
5795538    4 -rw-rw-r--   1 xieerqi  xieerqi       178 Aug 19 16:25 ./somefile.txt
5795539    4 -rw-rw-r--   1 xieerqi  xieerqi       219 Aug 19 16:26 ./somefile2.txt

লক্ষ্য করুন, উদাহরণস্বরূপ, নেতৃস্থানীয় ডটের সাথে লুকানো ফাইলগুলি সহ সমস্ত ফাইল findতালিকাভুক্ত করে ।.bashrc

এখন, এই কমান্ডটি অ্যাক্সেস করা সহজ করার জন্য আপনার মধ্যে একটি উপন্যাস তৈরি করুন .bashrc। আমি আমার মত করে

alias ls2='printf "****DIRS****\n"; find . -maxdepth 1 -type d -ls; echo "****FILES****"; find . -maxdepth 1 -type f -ls '

উত্স বাশ্রাক সহ . .bashrcবা প্রস্থান এবং টার্মিনাল প্রবেশ করুন। আপনার উপনামটি আপনি যে কোনও সময় চাইলেই ব্যবহারের জন্য প্রস্তুত।


সবচেয়ে শক্তিশালী সরঞ্জাম? প্রকৃতপক্ষে. :)
এবি

1

ls বেশি আউটপুট কাস্টমাইজেশন সমর্থন করে না।

ব্যবহার

 ls --group-directories-first -l

শুধু প্রথমে ডায়ার পেতে।

কটাক্ষপাত আছে ট্যাক্সি ড্রাইভার (ডিফল্ট দ্বারা ইনস্টল নয়) ম যে সমর্থন আরো আউটপুট স্বনির্ধারণ (কিন্তু সব অপশন সমর্থন করে না বিকল্প জন্য ls)


0

আমার সর্বশেষ lsমুডে ~/binহল:

#!/bin/bash
ACCOUNT_ID=$UID
#
#SET ACCOUNT_NAME
ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 );

ls -l -F --color -h --group-directories-first $1 |\
    sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;

PS এর নাম রাখতে হবে ~/bin/mylsবা এটি এমন লুপে ঝুলবে যা কখনই সিস্টেমের কাছে পৌঁছায় না ls

নমুনা আউটপুট:

$ sudo mkdir -vp /temp/Nother_DIR | tee -a /tmp/record
mkdir: created directory `/temp'
mkdir: created directory `/temp/Nother_DIR'
$ sudo chown -vR $USER:$USER /temp | f | tee -a /tmp/record
changed ownership of `/temp/Nother_DIR' to $USER:$USER
changed ownership of `/temp' to $USER:$USER
$ cd /temp
$ touch a b c d
$ ln -sv d e | tee -a /tmp/record
`e' -> `d'
$ ln -sv e f | tee -a /tmp/record
`f' -> `e'
$ myls | tee -a /tmp/record
total 4.0K
drwxr-xr-x 2 $USER $USER 4.0K Sep 19 00:46 Nother_DIR
-rw-r--r-- 1 $USER $USER    0 Sep 19 00:46 a
-rw-r--r-- 1 $USER $USER    0 Sep 19 00:46 b
-rw-r--r-- 1 $USER $USER    0 Sep 19 00:46 c
-rw-r--r-- 1 $USER $USER    0 Sep 19 00:46 d
lrwxrwxrwx 1 $USER $USER    1 Sep 19 00:46 e -> d
lrwxrwxrwx 1 $USER $USER    1 Sep 19 00:46 f -> e

-1

আমার সর্বশেষতম ls mod bin / bin এ:

#!/bin/bash
ACCOUNT_ID=$UID
# 
#SET ACCOUNT_NAME
ACCOUNT_NAME=$( cat /etc/passwd | grep $ACCOUNT_ID | cut -d: -f1 );  

ls -l -F --color -h --group-directories-first $1 |\  
    sed "s/$ACCOUNT_NAME/\$USER/g" | ack --passthru --color \\\$USER ;  

পোস্টের ফর্ম্যাট সম্পর্কে দুঃখিত। অনুলিপি / পেস্টের মাধ্যমে ব্যবহারযোগ্য করে তোলার চেষ্টা করেছেন, তবে যেতে পারেন না। চিয়ার্স!
পিএস এর নাম ~ / বিন / মাইলস রাখতে হবে বা এটি লুপে ঝুলবে যা কখনই সিস্টেমের লসগুলিতে পৌঁছায় না।


ACCOUNT_NAME="$(getent passwd $UID | cut -d: -f1)"এবং/bin/ls -l -F ...
ওয়ালটিনেটর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.