一开始对我的英语很抱歉,我希望每个人都明白我的问题:)
我的tar文件位于:
/volume1/@appstore/SynoDSApps/archiv/DE/2018_08_18__Lysto BackUp.tar.gz
使用tar命令:
tar -tf "/volume1/@appstore/SynoDSApps/archiv/DE/2018_08_18__Lysto BackUp.tar.gz"
命令显示给我:
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/exit_codes/
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/exit_codes/code_FUNC
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/exit_codes/code_SCRI
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/login/
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/login/check_appprivilege.php
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/login/check_login.php
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/login/privilege.php
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/scripte/
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/scripte/Lysto BackUp/
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/scripte/Lysto BackUp/sys
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/webapp/scripte/Lysto BackUp/sys_func
/volume1/02_public/3rd_Party_Apps/SPK_SCRIPTS/SynoDSApps/SSH_ERROR
我的计划,或者更好的是,我希望这样处理:
IFS=$'\n'
for PATHS in $(tar -tPf "/volume1/@appstore/SynoDSApps/archiv/DE/2018_08_18__Lysto BackUp.tar.gz")
do
SED=$(echo "$PATHS" | sed 's/.*\///')
if [[ -n "$SED" ]]
then
tar -C "${target_archiv}" -xvf "/volume1/@appstore/SynoDSApps/archiv/DE/2018_08_18__Lysto BackUp.tar.gz" "$PATHS"
#echo JA
echo "$PATHS"
fi
done
unset IFS
我只需要tar的一个文件,并将其存储到其他目录中。 但是带-C的命令不起作用...它解压缩了tar的所有文件。...
我的问题是,是否可以仅将没有cd
的Tar文件提取到目录中?
或其他问题是否有可能只提取没有文件夹的tar文件,这也许是更好的方法,但我不知道如何...。
没有,我无法在没有路径的情况下对文件进行压缩,我需要它们... 所以这对我来说是不可能的...
我希望在这里有所帮助:)
答案 0 :(得分:0)
如果最终目的是提取没有完整路径的文件,则可以使用类似SED的表达式在提取文件时使用--xform
选项重命名文件:
tar -C "${target_archiv}" -xvf "/volume1/@appstore/SynoDSApps/archiv/DE/2018_08_18__Lysto BackUp.tar.gz" --xform='s,^.*/,,'
's,^.*/,,'
表达式要求从文件名(s
的开头替换(^
),捕获所有内容(.*
)并在最后一个斜杠( /
),然后将其替换为任何内容。换句话说,它从文件名中删除了目录结构。
如果要摆脱已提取的空文件夹,可以在提取后调用此命令:
find "${target_archiv}" -mindepth 1 -maxdepth 1 -type d -exec rmdir {} \;
请记住,它将删除“ $ {target_archiv}”的所有(空)子文件夹,甚至包括在提取压缩包之前已经存在的子文件夹。但是,由于rmdir
不会删除包含文件的目录,因此对您拥有的子目录几乎没有害处。