1

I would like to know automated script for copying source files from directory to multiple directories and after copying files remove the source files from the source directory

We have one folder where the .xml files are coming. so on first step i wanted to copy these files from this source folder to another two folders i.e folder one and folder two. Folder one is for keeping the files as backup purpose only and folder two is to run another script for splitting xml files according to our requirement. After copying files remove the files from source folder

Regards

11
  • You need to be more specific about what you want to achieve. Please edit your question to provide more details and examples of the desired directory/file structure before and after. Nov 22, 2022 at 14:37
  • A move mv operation instead of a copy operation cp is normally what is used to automate this. If you have specific requirements not covered by this, then please edit your question and add explanation.
    – vanadium
    Nov 22, 2022 at 14:42
  • @vanadium If i use mv command i am unable to copy the file to another folder
    – sunman
    Nov 22, 2022 at 14:59
  • @BeastOfCaerbannog Thanks for your reply .. this is only copying the files to directories.. i wanted to copy/move the files to multiple directory and then remove the source file
    – sunman
    Nov 22, 2022 at 15:24
  • 1
    The correct command would be: for i in /opt/test2 /opt/test3; do cp /opt/test1/*.txt "$i"; done && rm /opt/test1/*.txt The deletion of the files should happen after the for loop has completed. In your command you deleted the files right after copying them for the first time, i.e. after copying them to /opt/test2. Nov 23, 2022 at 12:54

2 Answers 2

4

The following bash script will monitor the source directory for incoming new files(i.e. It will not copy or remove any preexisting files) and copy them to two destination directories then delete them afterwords ... You need to run the script and keep it running before you start receiving any new files in the source directory(i.e. The script will catch new incoming files only if it is already running) ... The script uses inotifywait that you need to install first with sudo apt install inotify-tools ... Please read the comments in the script and specify the paths first:

#!/bin/bash

# Specify the full path to the source directory in the line below (keep the last "/").
source_d="/full/path/to/directory/"

# Specify the fullpath to the first destination directory in the line below (keep the last "/").
destination_d1="/full/path/to/directory1/"

# Specify the full path to the second destination directory in the line below (keep the last "/").
destination_d2="/full/path/to/directory2/"

inotifywait -m -q -e close_write "$source_d" |

  while read -r path action file; do
    cp -- "$path$file" "$destination_d1$file"
    cp -- "$path$file" "$destination_d2$file"
    rm -- "$path$file"
  done
-1

Use cp N-1 times and finally use mv for the Nth time.

cp [files] [folder1] 
cp [files] [folder2]
...
cp [files] [folderN-1]
mv [files] [folderN]
2
  • can you please give me a example of cp N-1 for moving files from one source to two destination folders
    – sunman
    Nov 23, 2022 at 12:22
  • You can't do it in one command. All I'm saying is you need to copy the files to you target directories and for the copy to the last directory use mv instead of cp to make sure the source files are deleted. Nov 23, 2022 at 15:00

Not the answer you're looking for? Browse other questions tagged or ask your own question.