I have a script that takes filenames as positional parameters. I perform a few operations on these and then tar them. Currently my script is not working. The echo line is there for debugging purposes.
Please clarify this statement
But when I try to tar with in the script if can file the file I want to tar.
SNIPPET
while [[ $# > 0 ]]; do
key="1ドル"
shift
files=$files" "\"${key}\"
done
echo tar -cvf backup.tar $files
tar -cvf backup.tar $files
OUTPUT:
tar -cvf backup.tar "test.txt"
tar: "test.txt": Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
I am using the double quotes around the filename (test.txt) as I want to handle files with spaces.
If I were to remove the quotes in the script (\"), it will work but then I can’t handle filenames with spaces.
Any ideas?
1 Answer 1
If you are always using all the params then just call tar
like this: tar -cvf backup.tar "$@"
. Otherwise, if you are selecting a subset (though you don't show it) then build up the file list in an array like this:
declare -a files
while [[ $# > 0 ]]; do
key="1ドル"
shift
# assume some filtering goes on here
files+=("$key")
done
tar -cvf backup.tar "${files[@]}"
-
excellent this work using the array and quoting when adding to the array. Thanks a million.goldengreen– goldengreen2017年10月14日 01:09:04 +00:00Commented Oct 14, 2017 at 1:09
tar -cvf backup.tar "$@"
?files="$files \"${key}\""
? Or use an array...files+=("$key")
and thentar -cvf backup.tar ${files[@]}
$files
variable in the tar statement unquoted though? Otherwise, wont they be treated as one argument?