可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
Many will found that this is repeating questions but i have gone through all the questions before asked about this topic but none worked for me.
I want to print full path name of the certain file format using ls command so far i found chunk of code that will print all the files in the directory but not full path.
for i in io.popen("ls /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do
if string.find(i,"%.*$") then
print(i)
end
end
this will print out all the file in root diractory and subdiratory.
Output:
0020111118223425.lvf
2012
2012 (2009).mp4
3 Idiots
Aashiqui 2
Agneepath.mkv
Avatar (2009)
Captain Phillips (2013)
Cocktail
I want output like:
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/0020111118223425.lvf [File in Root Directory]
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012/2012.mkv
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/2012 (2009).mp4 [File in Root Directory]
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/3 Idiots/3 Idiots.mkv
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Aashiqui 2/Aashiqui 2.mkv
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Avatar (2009)/Avatar (2009).mkv
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Captain Phillips (2013).mkv
/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/Cocktail/Cocktail.mkv
EDIT:
I have used this all but its not working with my code in LUA.
when I used with my code it displays wrong directory
for i in io.popen("ls -d $PWD/* /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7"):lines() do
if string.find(i,"%.*$") then
print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/"..i)
end
end
is not finding files in "/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7" insted its prints the machines root directory files.
回答1:
You can use
ls -lrt -d -1 "$PWD"/{*,.*}
It will also catch hidden files.
回答2:
You can try this:
ls -d $PWD/*
回答3:
For listing everything with full path, only in current directory
find $PWD -maxdepth 1
Same as above but only matches a particular extension, case insensitive (.sh files in this case)
find $PWD -maxdepth 1 -iregex '.+\.sh'
$PWD is for current directory, it can be replaced with any directory
mydir="/etc/sudoers.d/" ; find $mydir -maxdepth 1
maxdepth
prevents find from going into subdirectories, for example you can set it to "2" for listing items in children as well. Simply remove it if you need it recursive.
To limit it to only files, can use -type f
option.
find $PWD -maxdepth 1 -type f
回答4:
You could easily use the following to list only files:
ls -d -1 $PWD/*.*
the following to list directories:
ls -d -1 $PWD/**
the following to list everything (files/dirs):
ls -d -1 $PWD/**/*
More helpful options:
-d list directories not their content
-R recursive
-1 list one file per line
-l use long listing format
-a list all including entries starting with . and ..
-A list all but don't list implied . and ..
for more info, just type the following
ls --help
回答5:
This prints all files, recursively, from the current directory.
find "$PWD" | awk /.ogg/ # filter .ogg files by regex
find "$PWD" | grep .ogg # filter .ogg files by term
find "$PWD" | ack .ogg # filter .ogg files by regex/term using https://github.com/petdance/ack2
回答6:
The ls
command will only print the name of the file in the directory. Why not do something like
print("/mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7/" + i)
This will print out the directory with the filename.
回答7:
There is more than one way to do that, the easiest I think would be:
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7
also this should work:
(cd /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7; ls | xargs -i echo `pwd`/{})
回答8:
I have had this issue, and I use the following :
ls -dl $PWD/* | grep $PWD
It has always got me the listingI have wanted, but your mileage may vary.
回答9:
This worked for me:
ls -rt -d -1 $PWD/{*,.*}
回答10:
you just want the full path why not use the utility meant for that
a combination of readlink and grep should get you what you want
grep -R '--include=*.'{mkv,mp4} ? | cut -d ' ' -f3 | xargs readlink -e #
the question mark should be replaced with the right pattern - this is almost right
# this is probably the best solution remove the grep part if you dont need a filter
find <dirname> | grep .mkv | xargs readlink -e | xargs ls --color=auto # only matroska files in the dir and subdirs with nice color - also you can edit ls flags
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | grep .mkv
find /mnt/mediashare/net/192.168.1.220_STORAGE_1d1b7 | xargs grep -R '--include=*.'{mkv,mp4} . | cut -d ' ' -f3 # I am sure you can do more with grep
readlink -f `ls` # in the directory or