How to get the list of files in a directory in a shell script?

shell script to loop through files in a directory
shell script to list all files in current directory
list all files in a directory linux shell script
bash script list all files in directory and subdirectories
script to get all filenames in a directory
script to list files in a folder
get list of all files in a directory bash
c shell list files in directory

I'm trying to get the contents of a directory using shell script.

My script is:

for entry in `ls $search_dir`; do
    echo $entry
done

where $search_dir is a relative path. However, $search_dir contains many files with whitespaces in their names. In that case, this script does not run as expected.

I know I could use for entry in *, but that would only work for my current directory.

I know I can change to that directory, use for entry in * then change back, but my particular situation prevents me from doing that.

I have two relative paths $search_dir and $work_dir, and I have to work on both simultaneously, reading them creating/deleting files in them etc.

So what do I do now?

PS: I use bash.

for entry in "$search_dir"/*
do
  echo "$entry"
done

Loop through a folder and list files, You can use the ls command to list the files in any directory to which you have access. For a simple directory listing, at the Unix prompt, enter: What you need to do is expand that to a list of files in the directory. You could do this using the following: for file in "${dir}/"* ; do This will expand the "${dir}/"*section into a name-only list of the current directory.

The other answers on here are great and answer your question, but this is the top google result for "bash get list of files in directory", (which I was looking for to save a list of files) so I thought I would post an answer to that problem:

ls $search_path > filename.txt

If you want only a certain type (e.g. any .txt files):

ls $search_path | grep *.txt > filename.txt

Note that $search_path is optional; ls > filename.txt will do the current directory.

List the files in a directory in Unix, You should use something like: ls -l -d /home/user012/Desktop/folder2Start/*/. */ looks for directories; -d says do not print the content of those  will give you a list of all the contained items, with directories and files mixed. You can save this output to a temporary file, then extract all lines that start with 'd'; those will be the directories. Lines that start with an 'f' are files.

This is a way to do it where the syntax is simpler for me to understand:

yourfilenames=`ls ./*.txt`
for eachfile in $yourfilenames
do
   echo $eachfile
done

./ is the current working directory but could be replaced with any path *.txt returns anything.txt You can check what will be listed easily by typing the ls command straight into the terminal.

Basically, you create a variable yourfilenames containing everything the list command returns as a separate element, and then you loop through it. The loop creates a temporary variable eachfile that contains a single element of the variable it's looping through, in this case a filename. This isn't necessarily better than the other answers, but I find it intuitive because I'm already familiar with the ls command and the for loop syntax.

command line - how to list files in a folder using bash scripting, Doing an ls under any directory will give you the list of all files(use -a to get the hidden files details), but the output will include all the details of  echo * Outputs all files of the current directory. The for loop iterates over each file name and prints to stdout. Additionally, If looking for directories inside the directory then place this inside the for loop: if [ test -d $z ]; then echo "$z is a directory" fi. test -d checks if the file is a directory. share.

for entry in "$search_dir"/* "$work_dir"/*
do
  if [ -f "$entry" ];then
    echo "$entry"
  fi
done

Shell Script For Getting List Of File name In A directory (GNU/Linux , ls is a Linux shell command that lists directory contents of files and directories. ls syntax; ls options; ls examples; ls code generator. ls syntax. $ ls [options] [file|dir]​  At a command prompt, locate the drive that contains the folder whose contents you want to list. For example, if you want to create a text file that contains a list of the contents of a folder on drive C, type the following command at a command prompt, and then press ENTER:

find "${search_dir}" "${work_dir}" -mindepth 1 -maxdepth 1 -type f -print0 | xargs -0 -I {} echo "{}"

ls command in Linux/Unix, txt”, “File*.csv”, “*.html”.., etc. In such scenario you can use the below command shell scripts to get the desired results which  Then it takes each folder in turn, and displays the files from that folder. This continues until all the files in all the nested folders are displayed. If I use the –File parameter, I do not get the initial folder list: Get-ChildItem -Path E:\music\Santana -Recurse –File. The command and output from the command are shown here: Easy sorting

How to get list of filenames in a folder – Command Shell Script , Complicated names of files and directories can make your life painful when working on the command line. Here we provide a few useful tips for the names of​  I am working on a shell script. I need to find out the current working directory. How do I get the current working directory under Bash or Ksh shell running on Linux or Unix like operating systems? You can use shell variable called PWD or pwd built-in command to get the current working directory. The cd command sets the following shell variable:

Working With Files and Directories – The Unix Shell, To start exploring them, we'll go to our open shell window. First let's find ls prints the names of the files and directories in the current directory. We can make its  Listing All the Files and Folders Within a Folder You can get all items directly within a folder by using Get-ChildItem. Add the optional Force parameter to display hidden or system items. For example, this command displays the direct contents of Windows PowerShell Drive C (which is the same as the Windows physical drive C):

Navigating Files and Directories – The Unix Shell, How can I get a list of files in a directory?

Comments
  • Can you explain why for entry in "$search_dir/*" don't work? Why we need to place /* outside of quotes?
  • @mrgloom: Because you need to let the shell glob the wildcard.
  • wouldn't find be faster?
  • The solution gives the full path. What if I just wanted to list what was in the current directory?
  • @mrgloom if you want to do so you can achieve that with for entry in "${search_dir}/*"
  • No need to use grep to get only .txt files: `ls $search_path/*.txt > filename.txt'. But more importantly, one should not use the output of the ls command to parse file names.
  • @VictorZamanian, can you elaborate why we should not use the output of ls to parse filenames? Haven't heard of this before.
  • @samurai_jane There's a lot of links to provide regarding this topic, but here's one first search result: mywiki.wooledge.org/ParsingLs. I even saw a question here on SO claiming the reasons for not parsing the output of ls were BS and was very elaborative about it. But the replies/answers still claimed it was a bad idea. Have a look: unix.stackexchange.com/questions/128985/…
  • This works OK for a quick, informal script or one-liner, but it will break if a filename contains newlines, unlike the glob-based solutions.
  • @SorenBjornstad thanks for the advice! I didn't know newlines were permitted in filenames- what kind of files might have them? Like, is this something that occurs commonly?
  • Newlines in filenames are evil for this reason and as far as I know there's no legitimate reason to use them. I've never seen one in the wild myself. That said, it's totally possible to maliciously construct filenames with newlines in such a way as to exploit this. (For instance, imagine a directory containing files A, B, and C. You create files called B\nC and D, then choose to delete them. Software that doesn't handle this right could end up deleting preexisting files B and C instead even if you didn't have permission to do that.)
  • I know this is pretty old but I can't seem to get the last xargs -0 -i echo "{}" command, care to explain me a bit? In particular what is the -i echo "{}" part do? Also I read from the man page that -i is deprecated now and we should use -I insted.