查找文件并使用其名称中的尾随或前导空格对其进行tar

时间:2015-05-13 11:59:03

标签: linux bash tar

我有一个脚本,尝试使用tar存档目录的内容:

#!/bin/bash

find /root/files -type f -name "1*" -print0 | while read -d $'\0' file
do
    MYDIRNAME=$(dirname "${file}")
    MYFILENAME=$(basename "${file}")
    MYMODIFYDIR=$(echo "$MYDIRNAME" | sed 's/^\///' | sed 's/\//_/g' | sed 's/\ /_/g')
    MYMODIFYFILENAME=$(echo "$MYFILENAME" | sed 's/\//_/g' | sed 's/\ /_/g')
    GZIP=-9 tar -zcvf /root/"$MYMODIFYDIR"_"$MYMODIFYFILENAME".tar.gz "$file"
done

它不适用于名称中包含前导或尾随空格的文件。到达文件/root/files/tetst\ test\ tgdjd/1\ 5765765\ 565765\时发生错误(注意文件名中的尾随空格):

tar: /root/files/tetst test tgdjd/1 5765765 565765: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

tar给出的错误包含文件名中的尾随空格 trim

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

$('.datetimepicker').on('hide', function () {
    $("body").css('position', '');
    $("body").css('width', '');
})

使用-P选项禁用此功能。

答案 1 :(得分:0)

您忘记在while循环中重置IFS,因此前导空格和尾随空格被视为分隔符。使用此:

find /root/files -type f -name "1*" -print0 | while IFS= read -d $'\0' file

如果文件名中可能有反斜杠,您还可以添加-r来读取。

请点击此处查看有关readIFS的更多详细说明:https://stackoverflow.com/a/26480210/1262699