Sponsored Content
Full Discussion: renaming jpeg files
Top Forums Shell Programming and Scripting renaming jpeg files Post 302436311 by alister on Saturday 10th of July 2010 06:01:00 PM
Old 07-10-2010
Using ls in a command substitution to generate a list of filenames for a list is almost always a poor approach, no matter how you look at it (efficiency, readability, maintainability, robustness (with regard to IFS characters in filenames).

In my opinion (and that's all it is), it's one of the worst yet common scripting practices. I think I see it used just about every day. At least a UUoC is generally harmless. "$(ls *.jpg)" versus a simple "*.jpg" is often buggy.

Regards,
Alister

---------- Post updated at 06:01 PM ---------- Previous update was at 05:49 PM ----------

Quote:
Originally Posted by KenJackson
But I just now tried that way and Scrutinizer's way and was surprised to find that simple wildcard expansion does work with filenames that have spaces in them, whereas using ls does not.

That's excellent to know, because I sometimes encounter filenames with spaces. So I always try to make all my scripts work seamlessly with them.
The only shell command line parsing step after pattern expansion is quote removal, so it's safe from field splitting and other substitutions/expansions.

Command substitution, however, occurs before field splitting, and is unsafe if the filename contains a character which is used to delimit fields (these characters are denoted by the contents of the IFS variable, whose default value is space, tab, newline). You can quote the command substitution, to prevent field splitting of the command's results, but that would always yield a single word (useless in a loop list context since it would always lead to a single iteration).

Regards,
Alister
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

renaming files

i have a set of *.lst files. now i want to change the names from "lst" to "dat". how to do it? ex.: -rw-r--r-- 1 rram group 22 Sep 21 13:10 a.lst -rw-r--r-- 1 rram group 22 Sep 21 13:09 b.lst -rw-r--r-- 1 rram group 22 Sep 21 13:10 c.lst... (4 Replies)
Discussion started by: raguramtgr
4 Replies

2. UNIX for Dummies Questions & Answers

renaming the files

Hi All, Today I got a small problem while handling zipped files in PROD support. There are files in this format and I had to grep them reading some contents A.B.gz.C.D where A,B,C and D stand for variables (like FIRST.NAME.gz.MIDDLE.LAST). I know that these files are zipped files and If I... (1 Reply)
Discussion started by: adurga
1 Replies

3. UNIX for Dummies Questions & Answers

ftp selected jpeg files from unix filesystem

Hi All We have hp-ux 11iv1 system running with oracle8i database. We have around 350,000 users, each user uploaded their own signatures and are stored in unix filesystems department wise. A database is maintained to keep their particulars with a path to link their signature files. Now... (3 Replies)
Discussion started by: mhbd
3 Replies

4. UNIX for Dummies Questions & Answers

Renaming Files

Hi Alll, I have a script that we use on the servers to change the name of files that have spaces in the name: #!/bin/tcsh set n = 0 foreach f ( * ) echo $f | grep " " if ( $? == 0 ) then mv "$f" `echo $f | sed -e "s/ /_/g"` @ n += 1 endif end echo $n changed I need to write a... (2 Replies)
Discussion started by: abch624
2 Replies

5. Shell Programming and Scripting

renaming files

Hi all, using a utility image file was named starting with blank space and a blank space in between. I want to rename the files. file names are in the format " sb 12.tif"," sb 13.tif"," sb 14.tif" the files are in thousands. i want to rename as 12.tif, 13.tif, 14.tif.... thanks. (3 Replies)
Discussion started by: ahkverma
3 Replies

6. Shell Programming and Scripting

renaming files or adding a name in the beginning of all files in a folder

Hi All I have a folder that contains hundreds of file with a names 3.msa 4.msa 21.msa 6.msa 345.msa 456.msa 98.msa ... ... ... I need rename each of this file by adding "core_" in the begiining of each file such as core_3.msa core_4.msa core_21.msa (4 Replies)
Discussion started by: Lucky Ali
4 Replies

7. Shell Programming and Scripting

cp RAW files if JPEG file present

hi guys and girls, i have a folder containing RAW and JPG images. eg... 001.jpg 003.jpg 005.jpg 001.raw 002.raw 003.raw 004.raw 005.raw I want to copy only RAW files that have a corresponding JPG file in to a new folder. the jpg files do not need to be copied. in this example i... (6 Replies)
Discussion started by: fxylxy
6 Replies

8. Shell Programming and Scripting

Renaming files

Hi i have to achieve the following i have files as xyz001.csv, xyz002.csv.......xyz0025.csv in a folder, i need to keep xyz001.csv as it is but want to remove the extra zero on filename from 10 say xyz0010 should be renamed to xyz010 xyz0025 should be renamed as xyz025 Note xyz... (8 Replies)
Discussion started by: mad_man12
8 Replies

9. Shell Programming and Scripting

Renaming multiple files in sftp server in a get files script

Hi, In sftp script to get files, I have to rename all the files which I am picking. Rename command does not work here. Is there any way to do this? I am using #!/bin/ksh For eg: sftp user@host <<EOF cd /path get *.txt rename *.txt *.txt.done ... (7 Replies)
Discussion started by: jhilmil
7 Replies
WORDEXP(3)						     Linux Programmer's Manual							WORDEXP(3)

NAME
wordexp, wordfree - perform word expansion like a posix-shell SYNOPSIS
#include <wordexp.h> int wordexp(const char *s, wordexp_t *p, int flags); void wordfree(wordexp_t *p); Feature Test Macro Requirements for glibc (see feature_test_macros(7)): wordexp(), wordfree(): _XOPEN_SOURCE DESCRIPTION
The function wordexp() performs a shell-like expansion of the string s and returns the result in the structure pointed to by p. The data type wordexp_t is a structure that at least has the fields we_wordc, we_wordv, and we_offs. The field we_wordc is a size_t that gives the number of words in the expansion of s. The field we_wordv is a char ** that points to the array of words found. The field we_offs of type size_t is sometimes (depending on flags, see below) used to indicate the number of initial elements in the we_wordv array that should be filled with NULLs. The function wordfree() frees the allocated memory again. More precisely, it does not free its argument, but it frees the array we_wordv and the strings that points to. The string argument Since the expansion is the same as the expansion by the shell (see sh(1)) of the parameters to a command, the string s must not contain characters that would be illegal in shell command parameters. In particular, there must not be any unescaped newline or |, &, ;, <, >, (, ), {, } characters outside a command substitution or parameter substitution context. If the argument s contains a word that starts with an unquoted comment character #, then it is unspecified whether that word and all fol- lowing words are ignored, or the # is treated as a non-comment character. The expansion The expansion done consists of the following stages: tilde expansion (replacing ~user by user's home directory), variable substitution (replacing $FOO by the value of the environment variable FOO), command substitution (replacing $(command) or `command` by the output of command), arithmetic expansion, field splitting, wildcard expansion, quote removal. The result of expansion of special parameters ($@, $*, $#, $?, $-, $$, $!, $0) is unspecified. Field splitting is done using the environment variable $IFS. If it is not set, the field separators are space, tab and newline. The output array The array we_wordv contains the words found, followed by a NULL. The flags argument The flag argument is a bitwise inclusive OR of the following values: WRDE_APPEND Append the words found to the array resulting from a previous call. WRDE_DOOFFS Insert we_offs initial NULLs in the array we_wordv. (These are not counted in the returned we_wordc.) WRDE_NOCMD Don't do command substitution. WRDE_REUSE The argument p resulted from a previous call to wordexp(), and wordfree() was not called. Reuse the allocated storage. WRDE_SHOWERR Normally during command substitution stderr is redirected to /dev/null. This flag specifies that stderr is not to be redirected. WRDE_UNDEF Consider it an error if an undefined shell variable is expanded. RETURN VALUE
In case of success 0 is returned. In case of error one of the following five values is returned. WRDE_BADCHAR Illegal occurrence of newline or one of |, &, ;, <, >, (, ), {, }. WRDE_BADVAL An undefined shell variable was referenced, and the WRDE_UNDEF flag told us to consider this an error. WRDE_CMDSUB Command substitution requested, but the WRDE_NOCMD flag told us to consider this an error. WRDE_NOSPACE Out of memory. WRDE_SYNTAX Shell syntax error, such as unbalanced parentheses or unmatched quotes. VERSIONS
wordexp() and wordfree() are provided in glibc since version 2.1. ATTRIBUTES
For an explanation of the terms used in this section, see attributes(7). +-----------+---------------+--------------------------------+ |Interface | Attribute | Value | +-----------+---------------+--------------------------------+ |wordexp() | Thread safety | MT-Unsafe race:utent const:env | | | | env sig:ALRM timer locale | +-----------+---------------+--------------------------------+ |wordfree() | Thread safety | MT-Safe | +-----------+---------------+--------------------------------+ In the above table, utent in race:utent signifies that if any of the functions setutent(3), getutent(3), or endutent(3) are used in paral- lel in different threads of a program, then data races could occur. wordexp() calls those functions, so we use race:utent to remind users. CONFORMING TO
POSIX.1-2001, POSIX.1-2008. EXAMPLE
The output of the following example program is approximately that of "ls [a-c]*.c". #include <stdio.h> #include <stdlib.h> #include <wordexp.h> int main(int argc, char **argv) { wordexp_t p; char **w; int i; wordexp("[a-c]*.c", &p, 0); w = p.we_wordv; for (i = 0; i < p.we_wordc; i++) printf("%s ", w[i]); wordfree(&p); exit(EXIT_SUCCESS); } SEE ALSO
fnmatch(3), glob(3) COLOPHON
This page is part of release 4.15 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/. 2017-09-15 WORDEXP(3)
All times are GMT -4. The time now is 04:31 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy