3

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

user1045680
  • 815
  • 2
  • 9
  • 19
  • Have you tried adding `\\` in front of the spaces in your script variable? It most probably has to do with how the argument is processed via the variable in the script, which varies form the command line. – Nic3500 Aug 11 '18 at 15:49

0 Answers0