Soft link/file name problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Soft link/file name problem
# 1  
Old 01-26-2009
Soft link/file name problem

I want to find graphic files on an external disk then create soft links to those files in a folder on my machine. I have a problem with file names: if there are two graphic files in different directories but with the same file name, a link is created only for the first file i.e the 2nd file is skipped. Any suggestion on how to overcome this greatly appreciated. Is there a way to give a new filename in the soft link for a file name that already exists?

Code:
imgdir=/home/stuff

find /mnt/disk -type f -a \
	\( -name '*.gif' \
	-o -name '*.GIF' \
	-o -name '*.jpg' \
	-o -name '*.JPG' \
	-o -name '*.jpeg' \
	-o -name '*.JPEG' \
	-o -name '*.png' \
	-o -name '*.PNG' \
	\) -exec ln -s {} $imgdir ';'

Thanks

Last edited by stumpyuk; 01-26-2009 at 09:34 PM..
# 2  
Old 01-29-2009
Change the find command to call a script such as "makelink" which accepts two arguments, the origin path name and the destination dir.

Then, that script will handle the details, and looks something like this:
Code:
filepath=$1
file=${1##*/}   # works in ksh and bash. Otherwise use `basename $1`
dir=$2
while [ -f $dir/$file -o -L $dir/$file ]; do
   # TODO transform  $file here
done
ln -s $filepath $dir/$file

Now, I don't want to completely spoil it for you. How you do the TODO part isn't standard, but how you want to name your files. Do you want them to be numbered like in Window, or something like "file1.jpg" and "file2.jpg" or more exotic like "file0001.jpg" or maybe "file from vol1.jpg" ?
# 3  
Old 01-29-2009
Thanks for the reply. I was thinking that the file name would stay the same but just increment by [1], [2] etc. So if 3 files called 10.jpg were found on the filesystem, they would be called 10.jpg, 10[1].jpg, 10[2].jpg in my directory containing all of the link files.

Can you clarify how I modify the find command, please? I guess I just change the final line to use the -exec scriptname option?

Last edited by stumpyuk; 01-29-2009 at 07:56 PM..
# 4  
Old 01-30-2009
find command:
Code:
imgdir=/home/stuff

find /mnt/disk -type f -a \
	\( -name '*.gif' \
	-o -name '*.GIF' \
	-o -name '*.jpg' \
	-o -name '*.JPG' \
	-o -name '*.jpeg' \
	-o -name '*.JPEG' \
	-o -name '*.png' \
	-o -name '*.PNG' \
	\) -exec /usr/local/bin/makelink "{}" $imgdir ';'

The make the /usr/local/bin/makelink file as mentioned above. (If you don't have access permissions, create $HOME/bin and put it in there; change the find command appropriately.)

The missing part in the script should be something like this:
Code:
   file=`echo $file | perl -pe 's/(?<!\d\])\./[0]\./;s/\[(\d+)\]\./"[".($x=$1,++$x)."]."/e;'`

This will work for just about any number of files. Example:
Code:
echo test[99].jpg | perl -pe 's/(?<!\d\])\./[0]\./;s/\[(\d+)\]\./"[".($1+1)."]."/e;'
test[100].jpg

Perl does two substitutions (stuff between s/.../Smilie. The first looks for a period NOT preceded by a digit that is followed by a right-bracket. If it finds such a string, it replaces it with [0]. The next looks for a number inside brackets and followed by a period. If it finds such a thing (which it will if the previous step succeeded, or as it must if the previous step failed) it replaces the number found with the next higher number (just adds 1).

The output is sent to the shell which stores that output in the variable "file". The next iteration of the while loop should fail, and then the ln command will do its thing.
# 5  
Old 01-30-2009
Thanks squire! No amount of googling and book reading would have lead me to coming up with that solution any time soon.

Thanks again
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

A query on soft-link

Hi All, I tried creating a soft link with the file itself. It got created successfully. bash-3.2$ ls -l a lrwxrwxrwx 1 ebrigup other 1 Oct 5 19:14 a -> a bash-3.2$ Can anyone explain what is the possible use of it. I dont see any except practically wasting an inode... (2 Replies)
Discussion started by: brij123
2 Replies

2. Shell Programming and Scripting

Soft link

can u help me out how change the hooked file below. VEUEMASTER.txt -> /sbvnj/kfls//VSUE_OBR_MAER.txt.201503230800 (4 Replies)
Discussion started by: ramkumar15
4 Replies

3. Solaris

Soft link issue

I did restore from netbackup for root file system on separate slice instead of corrupted one. After restoration I found there are number of soft link issues lie e.g libabcxyx > /mnt/usr/lib it should be libabcxyz > /usr/lib does any have solution to change symbolic link changed in... (1 Reply)
Discussion started by: nimish_mehta
1 Replies

4. Shell Programming and Scripting

how to remove soft link

hi i have create a soft link using below command. ln -s <filename> <dirmane>where file name i use is t1 and dir name was t2. i deleted the dir t2 using command rm -rf to remove the soft link . however again i create a file a using the name t2 and when i just try to link t1 to t2 ... (1 Reply)
Discussion started by: scriptor
1 Replies

5. Shell Programming and Scripting

soft link issue

Hi , When installing oracle software a set of directories are created under the home directories. Since the home directory is usually not big , i would like to create a soft link from the home directory to mount point with alot of free space , that way the logs will not be wriiten under the... (1 Reply)
Discussion started by: yoavbe
1 Replies

6. UNIX for Dummies Questions & Answers

Can the timestamp of a soft link be changed?

I was wondering if it was at all possible to change the timestamp of a soft link. I want to change it to a time in the past before it was created. Sceanrio: In a directory i have a number of softlinks whih point to files, a script processes these files oldest first bassed on the time the... (8 Replies)
Discussion started by: cdoyle
8 Replies

7. UNIX for Dummies Questions & Answers

Difference between hard link and soft link

Hi Experts, Please help me out to find out difference between a hard link and a soft link. I am new in unix plz help me with some example commands ( for creating such links). Regards S.Kamakshi :) (2 Replies)
Discussion started by: kamakshi s
2 Replies

8. UNIX for Dummies Questions & Answers

Hard Link vs SOft Link????

Hi PLease let me know the usage of Hard Link vs Soft Link i.e what is the basic difference and what happens when one file is changed or deleted in both the cases??? thanks (3 Replies)
Discussion started by: skyineyes
3 Replies

9. UNIX for Dummies Questions & Answers

Difference between hard link and soft link in unix

Hi All, Can any one please explain me what is the difference between hard link and soft link in UNIX. Thanks in advance Raja Chokalingam. (2 Replies)
Discussion started by: RAJACHOKALINGAM
2 Replies

10. UNIX for Advanced & Expert Users

Differences between hard link and soft link

Hi all! I'd like to know the differences between hard links and soft links. I've already read the ln manpage, but i'm not quite sure of what i understood. Does a hard link sort of copy the file to a new name, give it the same inode number and same rights? What exactly should I do to do this:... (3 Replies)
Discussion started by: penguin-friend
3 Replies
Login or Register to Ask a Question