Restoring a file to its original location


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Restoring a file to its original location
# 1  
Old 03-01-2013
Restoring a file to its original location

Hello everyone,

I am attempting to make a recycling bin type application in shell script (tcsh). I have the whole part of the application done where someone can recycle files from one location to the recycling bin (the lower half of the program), this is not a problem. However I wanted to make another option if the user typed in something like recycle -cleanup as argument 1 it would go into a loop to check each file currently in the recycling bin and ask the user what to do. If the user chooses d, it deletes it. If they choose s it skips it, and lastly if they choose r I want to restore it. This is where the problem lies.

I am very inexperienced with shell programming in general so I am not even sure if the way I'm doing the -cleanup thing is right. But, is there a way to know the original file location so I can just put the file back? First check that there is not a file with a duplicate name in the old directory, then if not move it back. As of now I have no clue how to do this and any help would greatly be appreciated!

Thank you! This is what I have so far:

Code:
#!/bin/tcsh -f

if ["$1" == "-cleanup" ] then

set FILES=/$HOME/.garbage/*
set userChoice = " "
foreach file ( $FILES )
  echo "Processing $file file..."
  # take action on each file. $f store current file name

  echo "$file delete/restore/skip? (d/r/s)"
  set userChoice = $<

  if userChoice == "d" then
    rm $file
    echo "$file deleted!"
  else if userChoice == "r" then
   #restore to previous spot
   echo "$file restored!"
  else if userChoice == "s" then
   # do nothing
  else
   echo "You entered an invalid choice"

  endif
 
end
else


set n = 1
set size = 0
mkdir -p ~/.garbage

while ($n <= $#argv)
 if ( -d $argv[$n] ) then
   echo "$argv[$n] is a directory and cannot be removed"
 else
    
      
     mv $argv[$n] ~/.garbage
     
     echo "The file moved to the garbage directory was: "$argv[$n] "\n"
     set size = `du ~/.garbage | cut -f1`
  
 endif 
@ n++
end

  echo "The garbage bin's size is:" $size " bytes."
endif

---------- Post updated at 04:16 PM ---------- Previous update was at 03:54 PM ----------
# 2  
Old 03-01-2013
Sometimes it is easier to put all the files or dirs deleted into one dir using sequential number names, and make a log of who is who. Then, you must make sure the restore target is there with something like 'mkdir -p' but the entry name is not occupied. It is heavy duty shell scripting and command usage.
# 3  
Old 03-01-2013
This forum has a README:csh programming considered harmful
At least you should always quote "$var" when used as an argument (even in standard shells) and in set var2="$var" assignments.
Code:
rm "$file"
mv "$argv[$n]" ~/.garbage

You will experience! the difference if $file has the value *.
Better test this with echo:
Code:
echo $file
echo "$file"

When "quotes" cannot be used, the tcsh has the :q modifier but this often does not work either:
Code:
foreach file ( $FILES:q )


Last edited by MadeInGermany; 03-01-2013 at 07:34 PM..
# 4  
Old 03-01-2013
The script to put files from a certain area to the recycling bin already works. The one with the choice of d, r, or s does not. In this instance I am forced to use tsch because this is academic in nature. Personally, I don't know why tsch is even taught if Bash is supposed to be so much better. But I will keep trying and adjusting code. It seems like the only way to make a restore to the original location is to keep the path name somewhere in a log type file.
# 5  
Old 03-02-2013
If your if ... then ... elsif ... then ... endif chain is about one variable, you can use a switch/case construct.
From man tcsh:
Code:
  set userChoice = $<
  switch ( "$userChoice" )
  case "d":
    rm "$file"
    echo "$file deleted!"
    breaksw
  case "r":
    #restore to previous spot
    echo "$file restored!"
    breaksw
  case "s":
    # do nothing
    breaksw
  default:
    echo "You entered an invalid choice"
  endsw

After reading man bash:
Code:
  read userChoice
  case "$userChoice" in
  "d")
    rm "$file"
    echo "$file deleted!"
    ;;
  "r")
    #restore to previous spot
    echo "$file restored!"
    ;;
  "s")
    # do nothing
    ;;
  *)
    echo "You entered an invalid choice"
  esac

# 6  
Old 03-05-2013
With 'case', put your test patterns in full parens (...) so you do not sabotage the vi feature '%' for finding pairs or symmetrical container symbols.
Code:
  read userChoice
  case "$userChoice" in
  ("d")
    rm "$file"
    echo "$file deleted!"
    ;;
  ("r")
    #restore to previous spot
    echo "$file restored!"
    ;;
  ("s")
    # do nothing
    ;;
  (*)
    echo "You entered an invalid choice."
    ;;
  esac

# 7  
Old 03-05-2013
Code:
/bin/sh -nx

syntax error: `(' unexpected.
For me portability is of greater concern than a vi feature.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to find a existing file location and directory location in Solaris box?

Hi This is my third past and very impressed with previous post replies Hoping the same for below query How to find a existing file location and directory location in solaris box (1 Reply)
Discussion started by: buzzme
1 Replies

2. UNIX for Dummies Questions & Answers

how to copy files and record original file location?

:EDIT: I think my post name should have been labeled: how to copy files and record original file location. not "retain". Hello, this is my first post! I searched the forums a lot before posting, but was unable to answer my question. Here's my problem: There are several hundred text files... (4 Replies)
Discussion started by: willie8605
4 Replies

3. Shell Programming and Scripting

How to copy a file from one location to another location?

I have file file1.txt in location 'loc1'. Now i want a copy of this file in location 'loc2' with a new file called test.txt. Please help me how to do this in shell script. (1 Reply)
Discussion started by: vel4ever
1 Replies

4. Shell Programming and Scripting

File created in a different location instead of desired location on using crontab

Hi, I am logging to a linux server through a user "user1" in /home directory. There is a script in a directory in 'root' for which all permissions are available including the directory. This script when executed creates a file in the directory. When the script is added to crontab, on... (1 Reply)
Discussion started by: archana.n
1 Replies

5. Shell Programming and Scripting

Search Files from Array and link to original location in Perl

Hello, Question is related to Perl: I need to search few of the files from the array of file names. And after grepping the file names from an array I need to link these files to original location. The original location in this case is ref_path as input from the user. ##$ref_path is... (3 Replies)
Discussion started by: aarora1
3 Replies

6. Shell Programming and Scripting

restoring file to its default location...

Hello everyone, I am new to unix shell. I have a file called Path.txt....and i have data in that as 1 abhi 2 avi 3 ash so on..... 1 ,2 ,3 is the... (2 Replies)
Discussion started by: AbhijitIT
2 Replies

7. Shell Programming and Scripting

Put one string from one location to another location in a file

Hi Everyone, I have 1.txt here a b c' funny"yes"; d e The finally output is: here a b c d e' funny"yes"; (1 Reply)
Discussion started by: jimmy_y
1 Replies

8. Shell Programming and Scripting

Restoring a file

I'm new to Unix and have just wrote a little program to move files to a recycle bin (a Directory i created) and restore them. The problem is that i need to keep track of all the full filenames so that i can restore them to the right place. I did this by creating a file called delreg and putting the... (4 Replies)
Discussion started by: zoolz
4 Replies

9. Solaris

Restoring TAR'd file to different location

Is it possible to restore a TAR'ed file off of a tape to a location other than the original location? If so, how? (The MAN pages give examples of how to restore only to the originating location.) Thanks!! (1 Reply)
Discussion started by: FredSmith
1 Replies

10. UNIX for Dummies Questions & Answers

Restoring a file from Tape

help please i have "inherited" a Sco Server (the administrator departed in a hurry...yes we are chasing him..) and haven't used Unix for 8 years. i have a file that i need to retrieve from a tape. i have been able to find the file on tape using the cpio -ivt command. however... the problem I... (3 Replies)
Discussion started by: mfischer
3 Replies
Login or Register to Ask a Question