cp 命令在 azure devops 构建管道中的 Bash 脚本中不起作用
cp command not working in Bash Script in build pipeline of azure devops
我需要将包含多个文件的文件夹复制到构建管道中的另一个文件夹。
我用
cp -R -v pathToSourceFolder pathToDestFolder
cp -R -v /Users/runner/runners/2.166.4/work/1/s/en.lproj/ /Users/runner/runners/2.166.4/work/1/s/platforms/ios/AppName/Resources
我收到退出代码 126 的错误:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
我是 linux/macOS uses/cmd 的新手,谁能帮忙解决这个问题?
注意:macOS 上的管道 运行。
I need to copy the folder with multiple files to another folder in
build pipeline.
1.I 假设 /Users/runner/runners/2.166.4/work/1/s
是您构建的默认工作文件夹。所以请避免对路径进行硬编码,而是可以使用 $(System.DefaultWorkingDirectory)
代表该路径。请参阅 Azure Devops predefined variables。
2.Since你本来的目的是复制Azure Devops pipeline中的文件,不用太在意不同OS系统中对应的复制语法(Linux,MacOS 或 Windows)。
使用官方Copy Files task,您可以轻松做您想做的事。此任务需要三个输入:Source folder
、Target folder
和 Contents
我们要复制,仅此而已。
经典UI格式:
您可以通过Browse Source Folder
选项选择源文件夹。然后使用 **
作为目录,$(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources
作为目标文件夹。
yaml格式:
- task: CopyFiles@2
displayName: 'My Copy Task'
inputs:
SourceFolder: en.lproj
TargetFolder: '$(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources'
我们已经为您完成了后面的逻辑,以便您可以轻松地在MacOS/Linux/Windows中使用此任务。我的测试日志:
因为在 cp 命令中显然没有任何错误,我会写一些关于目录存在的安全检查:
# Define directories involved
from="pathToSourceFolder"
to="pathToDestFolder"
# Check existence
if [[ -d "$from" ]]
then
# If the destination directory does not exist, we create it.
[[ -d $to ]] || mkdir -p "$to"
if [[ -d $to ]]
then
cp -R -v "$from" "$to"
else
# If we get here, we will likely have permission problems.
echo Can not create directory $to
ls -ld "$to"
fi
else
echo Source directory $from does not exist
fi
我知道接受的答案说“cp”命令没有损坏,但它实际上在 azure 管道中。 Microsoft 似乎默认在末尾附加一个“/”,这破坏了命令的行为。
如果你这样做:
cp -r ./src ./dest
它将文件从 src 文件夹复制到 dest 文件夹。
如果你写:
cp -r ./src ./dest/
它将 src 文件夹复制到目标文件夹中,留下 /dest/src/*
此外,当我尝试复制文件时我的构建管道失败了
cp ./src/myfile.txt ./dest/myfile.txt
在末尾添加“/”将导致它失败,因为它试图将文件转储到一个不存在的目录中,因为实际运行的命令如下。
cp ./src/myfile.txt ./dest/myfile.txt/
我需要将包含多个文件的文件夹复制到构建管道中的另一个文件夹。
我用
cp -R -v pathToSourceFolder pathToDestFolder
cp -R -v /Users/runner/runners/2.166.4/work/1/s/en.lproj/ /Users/runner/runners/2.166.4/work/1/s/platforms/ios/AppName/Resources
我收到退出代码 126 的错误:
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory
我是 linux/macOS uses/cmd 的新手,谁能帮忙解决这个问题? 注意:macOS 上的管道 运行。
I need to copy the folder with multiple files to another folder in build pipeline.
1.I 假设 /Users/runner/runners/2.166.4/work/1/s
是您构建的默认工作文件夹。所以请避免对路径进行硬编码,而是可以使用 $(System.DefaultWorkingDirectory)
代表该路径。请参阅 Azure Devops predefined variables。
2.Since你本来的目的是复制Azure Devops pipeline中的文件,不用太在意不同OS系统中对应的复制语法(Linux,MacOS 或 Windows)。
使用官方Copy Files task,您可以轻松做您想做的事。此任务需要三个输入:Source folder
、Target folder
和 Contents
我们要复制,仅此而已。
经典UI格式:
您可以通过Browse Source Folder
选项选择源文件夹。然后使用 **
作为目录,$(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources
作为目标文件夹。
yaml格式:
- task: CopyFiles@2
displayName: 'My Copy Task'
inputs:
SourceFolder: en.lproj
TargetFolder: '$(System.DefaultWorkingDirectory)/platforms/ios/Fixi/Resources'
我们已经为您完成了后面的逻辑,以便您可以轻松地在MacOS/Linux/Windows中使用此任务。我的测试日志:
因为在 cp 命令中显然没有任何错误,我会写一些关于目录存在的安全检查:
# Define directories involved
from="pathToSourceFolder"
to="pathToDestFolder"
# Check existence
if [[ -d "$from" ]]
then
# If the destination directory does not exist, we create it.
[[ -d $to ]] || mkdir -p "$to"
if [[ -d $to ]]
then
cp -R -v "$from" "$to"
else
# If we get here, we will likely have permission problems.
echo Can not create directory $to
ls -ld "$to"
fi
else
echo Source directory $from does not exist
fi
我知道接受的答案说“cp”命令没有损坏,但它实际上在 azure 管道中。 Microsoft 似乎默认在末尾附加一个“/”,这破坏了命令的行为。
如果你这样做:
cp -r ./src ./dest
它将文件从 src 文件夹复制到 dest 文件夹。
如果你写:
cp -r ./src ./dest/
它将 src 文件夹复制到目标文件夹中,留下 /dest/src/*
此外,当我尝试复制文件时我的构建管道失败了
cp ./src/myfile.txt ./dest/myfile.txt
在末尾添加“/”将导致它失败,因为它试图将文件转储到一个不存在的目录中,因为实际运行的命令如下。
cp ./src/myfile.txt ./dest/myfile.txt/