Conduct a search or test -f over a path with spaces
I am organizing my music library on a NAS server. I want to print a list of all the directories that are missing the cover art (at least one or more jpeg file). I have successfully created a file with each line containing the path to each occurance of one or more .mp3 files. That path is also expected to have one or more files ending in .jpg or .JPG.
My input file strings look like this:
Most of the directory paths have one or more spaces in the directory, preventing me from testing for files with the .jpg extension, plus I have no idea how to do a case-intensive test. I will probably just have to perform two tests. I get a file not found error if I quote the entire string like:
After much searching, I decided I need to convert each path to this format"
If I can just get the path in the above format, I should be able to test for a jpg file with:
I have tried using the IFS="/" with the bash read and also awk with the IFS="/". Both these methods continue to use the space (and /) as an IFS and I end up with 6 fields in the case with the above path.
I am running an old version of linux, 2.6.17.14ReadyNAS, but I could do this over nfs with a modern kernel and tools. Any help would be greatly appreciated.
I am organizing my music library on a NAS server. I want to print a list of all the directories that are missing the cover art (at least one or more jpeg file). I have successfully created a file with each line containing the path to each occurance of one or more .mp3 files. That path is also expected to have one or more files ending in .jpg or .JPG.
My input file strings look like this:
Most of the directory paths have one or more spaces in the directory, preventing me from testing for files with the .jpg extension, plus I have no idea how to do a case-intensive test. I will probably just have to perform two tests. I get a file not found error if I quote the entire string like:
After much searching, I decided I need to convert each path to this format"
If I can just get the path in the above format, I should be able to test for a jpg file with:
I have tried using the IFS="/" with the bash read and also awk with the IFS="/". Both these methods continue to use the space (and /) as an IFS and I end up with 6 fields in the case with the above path.
I am running an old version of linux, 2.6.17.14ReadyNAS, but I could do this over nfs with a modern kernel and tools. Any help would be greatly appreciated.
Having spaces or tabs in the pathname of a directory does not prevent you from matching files in that directory as long as you use appropriate quotes.
The quoted pathnames:
and
should produce identical results, and if that is the pathname of a directory the pattern:
should expand to a list of the jpeg files in that directory (using a case insensitive match for the .jpg.
Note however, that this quoting needs to occur when you're typing pathnames into a shell script; not in a list of pathnames that you're reading from a file. If you put the quotes in the file containing a list of pathnames, the quotes become characters in the names of the directories rather than shell escapes that are discarded as part of quote expansion while processing command lines.
When you run the command:
does indeed have six fields, but space is not a field delimiter. If you run that command you'll see that the 1st field and the 6th field are the empty strings on the input line before the 1st "/" and after the last "/", respectively, and that there is a space character in both the 4th and 5th fields.
The command you listed above:
doesn't do what you want because it contains two and a half matched pairs of double quotes. The command:
(note that the asterisk is not quoted) will evaluate to FALSE if there aren't any jpeg files in that directory, will evaluate to TRUE if there is one jpeg file in that directory, and will give you a syntax error if there are two or more jpeg files in that directory.
It seems that you want something more like the command:
(note that the placement of the double quotes in this command is crucial) which evaluates to TRUE if there is at least one jpeg file in the directory named by $dir and to FALSE if there are no jpeg files in the directory named by $dir.
So, putting all of this together, if you have the list of directories you gave above in a file named dirs, the script:
This User Gave Thanks to Don Cragun For This Post:
I would like to find an undetermined number of spaces and shorten them to one space. I am running Debian in mksh. Script running in #!/bin/sh. Sorry to not include all code. The program is too big and involves an online file... too much hassle to solve a simple issue.
Ex.,
I start with... (11 Replies)
I am using the below bash loop:
or f in /media/cmccabe/My Book Western Digital/10_29and30_2015/*.bam ; do
bname=`basename $f`
pref=${bname%%.bam}
samtools view -H $f | sed '/^@PG/d' | samtools reheader - $f > /home/cmccabe/Desktop/NGS/${pref}_newheader.bam
done
is the... (1 Reply)
Hi everyone,
I'm trying to write my first ever shell script, the OS is Raspbian. The code I have written must be executed whenever a certain database has been modified. The database resides on a Windows server to which I have a mount point, and I have no control over the Windows server at all so... (2 Replies)
Hi
I am looking to search a string having spaces in a directory
for example :
my string is "summer hot"
my code :for i in `cat position__list.txt`
do
echo $i" : " `find . -mtime -6 | xargs grep -l ":83D:$i" | xargs ls -ltr|tail -1|awk '{ print $6 , $7 , $8, $9;... (6 Replies)
Hi all,
I have a variable test has the following value assigned.. could you please help on doing cd or ls to the value in the varible ...
$echo $test
/bdm/sdd/compounds/AD4833XT/requests/clin/Watson_20090420/docs/MHRA\ Comments\ \&\ Responses
$cd $test
ksh: cd: bad argument count
$cd... (3 Replies)
I have a Bash script on Cygwin that tries to iterate through the directory entries in PATH. I need to convert the PATH value to a form that I can iterate through with "for var in $list; do".
For instance, an excerpt from my PATH value is this:
:/c/Program Files/Windows Imaging/:/c/Program... (2 Replies)
Hi
I have a test.dat file in UNIX which has a data.I am informatica developer i get data in those files.I need to add 50 spaces to those data in test.dat file.I am new to unix So can any one help how can i do that.
I have some 2088 rows in that test.dat file.
Can anyone help me please its... (11 Replies)
Hi Everyone!
I'm quite new to shell scripting so this might be trivial, though 3 days of struggle and search didn't help to solve the problem:
I want to look for files called '*HUN*' in a huge amount of directories most of their names contain whitespaces and print the path of the directory if... (8 Replies)
Hi Gurus,
I have a requirement.
cat /usdd/Sample/"NDDF Plus DB"/"NDDF Descriptive and Pricing"/"NDDF BASICS 3.0"/"Pricing"/1.txt |
sed 's/*|*/|/g' |
sed 's/^*//'|
sed 's/^*//;
s/*$//' > temp.txt
In unix prompt the above command is reading the file 1.txt and I am... (1 Reply)
I'm using the following line in bash to test whether an argument supplied is an absolute path or not:
if echo $1 | grep '^/' > /dev/null
then
absolute=1
else
absoute=0
fi
The line appears to work but seems somewhat unprofessional looking to me. Is it an acceptable... (2 Replies)