bash - 我在将 bash 中的文件从子目录复制到父目录时遇到问题
问题描述
大家好
我有一个 bash 脚本来安装我的基于 bash 的应用程序(它们只是我包装的 bash 脚本,以作为Platypus的应用程序工作。
我有我需要复制到“安装应用程序”的资源文件夹中的父目录的应用程序。
它是这样的:
AFolderWhereItGotDownloaded/
Install.app/
Contents/
MacOS/
Info.plist
Resources/
Application1.app/ <-- This is the application that I want to move to "AFolderItGotDownloaded"
Application2.app/ <-- This is the application that I want to move to "AFolderItGotDownloaded"
AppSettings.plist
AppIcon.icns
MainMenu.nib
script <-- This is the script that runs when I double click the app
我唯一想做的就是cp -r
或rsync -r
两个应用程序AFolderWhereItGotDownloaded/
到目前为止我所做的:
#!/bin/bash
#The directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &>/dev/null 2>&1 && pwd )"
#The "parent" directory
PARENTDIR="../../.."
cp -r "${DIR}/Application1.app" "${PARENTDIR}/Application1.app"
cp -r "${DIR}/Application2.app" "${PARENTDIR}/Application2.app"
我得到什么:
cp: ../../../Application1.app: Permission denied
cp: ~/Downloads/AFolderWhereItGotDownloaded/Install.app/Contents/Resources/Application1.app: unable to copy extended attributes to ../../../Application1.app: Permission denied
使用 rsync
#!/bin/bash
#The directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &>/dev/null 2>&1 && pwd )"
#The "parent" directory
PARENTDIR="../../.."
rsync -r "${DIR}/Application1.app" "${PARENTDIR}/Application1.app"
rsync -r "${DIR}/Application2.app" "${PARENTDIR}/Application2.app"
我得到什么:
rsync: mkdir "~/../../../Application1.app" failed: Permission denied (13)
rsync error: error in file IO (code 11) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/main.c(545) [receiver=2.6.9]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/io.c(453) [sender=2.6.9]
如果有人知道发生了什么,那就太好了...
OS: macOS Mojave (10.14.6)
文件信息窗口表明我有权读取和写入文件夹。
结果ls -l
里面 AFolderWhereItGotDownloaded
total 16
drwxr-xr-x@ 3 <myusername> staff 96 4 mai 00:13 Install.app
-rwxr-xr-x@ 1 <myusername> staff 1069 28 avr 13:20 LICENSE.txt
-rwxr-xr-x@ 1 <myusername> staff 2586 3 mai 15:05 README.md
内部安装.app
total 0
drwxr-xr-x@ 5 <myusername> staff 160 4 mai 00:13 Contents
内部内容
total 8
-rwxr-xr-x@ 1 <myusername> staff 632 3 mai 14:56 Info.plist
drwxr-xr-x@ 3 <myusername> staff 96 4 mai 00:13 MacOS
drwxrwxrwx@ 17 <myusername> staff 544 4 mai 13:43 Resources
内部资源
total 728 (I have other apps too but to keep it clean I only stated two "Applications" here)
-rwxrwxrwx@ 1 <myusername> staff 313202 3 mai 14:54 AppIcon.icns
-rwxrwxrwx@ 1 <myusername> staff 499 3 mai 14:56 AppSettings.plist
drwxrwxrwx@ 3 <myusername> staff 96 4 mai 00:13 Application1.app
drwxrwxrwx@ 3 <myusername> staff 96 4 mai 00:13 Application2.app
-rwxrwxrwx@ 1 <myusername> staff 42236 3 mai 14:56 MainMenu.nib
-rwxrwxrwx@ 1 <myusername> staff 940 4 mai 14:29 script
解决方案
PARENTDIR="../../.."
是错的。如果你执行cd ~; pwd
,它会显示类似/home/user
. 由于这是两个深,您应该PARENTDIR="../.."
改用。
此外,您必须具有类似 root 的权限(root、sudo)才能在根目录中创建文件。最好将软件/opt
添加到用户PATH
变量中,例如export PATH=$PATH:/opt/myapp/bin/
. 因为/opt
您还需要类似 root 的权限。
推荐阅读
- c - 反映 pset4 CS50
- caching - Apache Flink 相关/缓存数据选项
- c++ - 使用 SMB 连接到 Windows Server 文件系统
- android-studio - 如何使用if语句将数字相加?
- swift - 你能帮我解开这个末日金字塔(回调地狱)吗?
- python - 运行 docker image 时返回“bin/bash: python: command not found”
- c# - 按属性将对象分组到字典
- python - 如何在条件下加入 XML 标签(Python)?
- google-cloud-platform - 如何在 GCP 控制台中查看所有当前正在运行的计算引擎实例的列表?
- forms - 根据使用google form的选择转到另一个表格