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

Linux 查找文件并在其名称中使用尾随或前导空格对其进行tar,linux,bash,tar,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'

我有一个脚本,它试图用
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给出的错误从文件名中删除了尾随空格。

您可以尝试以下方法:

tar -zcvPf /root/"$MYMODIFYDIR"_"$MYMODIFYFILENAME".tar.gz "$file"

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

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

find /root/files -type f -name "1*" -print0 | while IFS= read -d $'\0' file
您还可以添加
-r
以读取文件名中是否有反斜杠


有关
read
IFS
的详细说明,请参见此处:

您可以始终使用
.tar.gz
扩展名运行
tar
命令,然后使用
mv
重命名该文件。问题是该文件末尾包含1576565765个空间。并且
/root/files/tetst test tgd/1576765565765
文件是否存在?
find /root/files -type f -name "1*" -print0 | while IFS= read -d $'\0' file