I am trying to run a tar command from a bash script, but I can't seem to get it to work. In particular, I am trying to exclude some files/dirs from the tar command, but I get errors. When I run the single tar command from the command line, it works!
My script:
#!/bin/bash
EXCLUDE_ITEMS=("file2.txt" "dir1/dir2" "dir 4/file 5.txt")
LOGS="/home/mark/Personal/Mark/2018/Debbie/log.txt"
# Create the list of excluded files and directories
for item in "${EXCLUDE_ITEMS[@]}"
do
EXCLUDE="$EXCLUDE --exclude=\"$item\""
done
# Remove the old log file
rm "$LOGS"
# Set up the destination dir
rm -r target_debbie
mkdir target_debbie
# Start the transfer
cd source_debbie
{
echo "starting in "; pwd
echo "tar vvcf - .${EXCLUDE} | (cd /home/mark/Personal/Mark/2018/Debbie/target_debbie; tar xpf -)"
tar vvcf - .${EXCLUDE} | pv | (cd /home/mark/Personal/Mark/2018/Debbie/target_debbie; tar xpf -)
} >>${LOGS} 2>>${LOGS}
The source tree that I am using for testing:
source_debbie/
├── dir1
│ └── dir2
│ └── file3.txt
├── dir3
│ └── file4.txt
├── dir 4
│ ├── file 4.txt
│ └── file 5.txt
├── file1.txt
└── file2.txt
The destination tree once I run my script:
target_debbie/
├── dir1
│ └── dir2
│ └── file3.txt
├── dir3
│ └── file4.txt
├── dir 4
│ ├── file 4.txt
│ └── file 5.txt
├── file1.txt
└── file2.txt
However, the following files/dirs should have been excluded: "file2.txt", "dir1/dir2", and "dir 4/file 5.txt".
The output of tar (ie my log file):
starting in
/home/mark/Personal/Mark/2018/Debbie/source_debbie
tar vvcf - . --exclude="file2.txt" --exclude="dir1/dir2" --exclude="dir 4/file 5.txt" | (cd /home/mark/Personal/Mark/2018/Debbie/target_debbie; tar xpf -)
drwxrwxr-x mark/mark 0 2018-08-11 07:29 ./
-rw-rw-r-- mark/mark 0 2018-08-11 07:29 ./file2.txt
drwxrwxr-x mark/mark 0 2018-08-11 07:29 ./dir3/
-rw-rw-r-- mark/mark 0 2018-08-11 07:29 ./dir3/file4.txt
-rw-rw-r-- mark/mark 0 2018-08-11 07:29 ./file1.txt
drwxrwxr-x mark/mark 0 2018-08-11 07:29 ./dir 4/
-rw-rw-r-- mark/mark 0 2018-08-11 07:29 ./dir 4/file 5.txt
-rw-rw-r-- mark/mark 0 2018-08-11 07:29 ./dir 4/file 4.txt
drwxrwxr-x mark/mark 0 2018-08-11 07:29 ./dir1/
drwxrwxr-x mark/mark 0 2018-08-11 07:29 ./dir1/dir2/
-rw-rw-r-- mark/mark 0 2018-08-11 07:29 ./dir1/dir2/file3.txt
tar: 4/file: Cannot stat: No such file or directory
tar: 5.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
If I run this command alone from the command line:
tar vvcf - . --exclude="file2.txt" --exclude="dir1/dir2" --exclude="dir 4/file 5.txt" | (cd /home/mark/Personal/Mark/2018/Debbie/target_debbie; tar xpf -)
I get this output in target_debbie, which is correct:
target_debbie/
├── dir1
├── dir3
│ └── file4.txt
├── dir 4
│ └── file 4.txt
└── file1.txt
What am I missing in my script?
Thanks,
Mark