Return to Snippet

Revision: 64596
at August 27, 2013 12:50 by tedw


Initial Code
#!/bin/sh
# Make sure file is saved with Unix encoding (dos2unix)
#
# This script will rename a file from the first parameter to the second parameter
# and do a sed replace of all references of the first parameter with the second parameter
#
# For example:
# RenameFileAndUpdateReferences.sh filename-dc80c59.css filename.css
if [ $# -lt 2 ] ; then
  echo
  echo Wrong number of parameters.
  echo Try again using the following format:
  echo RenameFileAndUpdateReferences.sh findstring replacestring
  echo
  echo example:
  echo "RenameFileAndUpdateReferences.sh \"filenameABC.ext\" \"filenameDEF.ext\""
  echo
  exit 1
fi

IFS=$'\n'

if [[ "$3" == 'go' ]]; then 
  TIMESTAMP=$(date +%s)
  BACKUP_EXT="rfaur_saved"
	BACKUP_SUFFIX=".$TIMESTAMP.$BACKUP_EXT"
  COUNTER=0

  echo "Replacing files..."
  for FILENAME in $(find . -type f -exec grep -l "$1" {} \;); do
    if [[ "$FILENAME" != *.$BACKUP_EXT* ]]; then # don't text in backup files
      echo "  working on file \"$FILENAME\""
      BACKUP_FILENAME="$FILENAME$BACKUP_SUFFIX"
      ###echo "$BACKUP_FILENAME"
      cp "$FILENAME" "$BACKUP_FILENAME"
      sed "s#$1#$2#g" "$BACKUP_FILENAME" > "$FILENAME"
      ### rm "$BACKUP_FILENAME" # uncomment this line to remove backup file
      COUNTER=$[$COUNTER +1]
    fi
  done
  echo "String replaced in $COUNTER file(s) (backup timestamp is $TIMESTAMP)"

  COUNTER=0
  echo "Renaming files..."
  for FILENAME in $(find . -type f -name "$1"); do
    NEW_FILENAME="$(dirname ${FILENAME})/$2" # e.g. some/path/to/the/newfilename
    echo "  renaming file \"$FILENAME\" to \"$NEW_FILENAME\""
		if [ -e $NEW_FILENAME ]; then
      BACKUP_FILENAME="$NEW_FILENAME$BACKUP_SUFFIX"
      echo "  \"$NEW_FILENAME\" already exists, backing up to \"$BACKUP_FILENAME\""
			cp "$NEW_FILENAME" "$BACKUP_FILENAME"
    fi
    mv $FILENAME $NEW_FILENAME
    COUNTER=$[$COUNTER +1]
  done
  echo "$COUNTER file(s) renamed"
  echo "-- DONE --"
else
  echo "All instances of \"$1\" will be changed to \"$2\" in the following files:"
  find . -type f -exec grep -n "$1" {} /dev/null \;
  echo

  echo "The following files will be renamed:"
  find . -type f -name "$1"
  echo

  echo "Preview done, add 'go' as the 3rd argument to execute changes"
fi

Initial URL


Initial Description
This script will rename a file from the first parameter to the second parameter and do a sed replace of all references of the first parameter with the second parameter

For example:
RenameFileAndUpdateReferences.sh filename-dc80c59.css filename.css

Initial Title
RenameFileAndUpdateReferences.sh

Initial Tags


Initial Language
Bash