Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Applescript+;Shell将文件夹列表与文件列表进行比较,并将文件移动到子文件夹中_Bash_Shell_Applescript - Fatal编程技术网

Bash Applescript+;Shell将文件夹列表与文件列表进行比较,并将文件移动到子文件夹中

Bash Applescript+;Shell将文件夹列表与文件列表进行比较,并将文件移动到子文件夹中,bash,shell,applescript,Bash,Shell,Applescript,我正在尝试创建一个applescript,它将运行下面的bash脚本。将任何名为temp_m的文件移动到具有匹配名称的文件夹中。提供的屏幕截图供参考。applescript的好处是用户可以方便地选择“松散图像”(源)文件夹和构建(归档)文件夹。它们通常位于不同的位置,有时位于服务器/共享上 例如来自 到 bash代码有几个问题;这是一个经过清理的版本,根据您的描述和屏幕截图,它尝试了我认为您正在尝试的操作: #将源和目标[root]目录设置为POSIX路径。 #不要在这里引用空格-这将在下面

我正在尝试创建一个applescript,它将运行下面的bash脚本。将任何名为temp_m的文件移动到具有匹配名称的文件夹中。提供的屏幕截图供参考。applescript的好处是用户可以方便地选择“松散图像”(源)文件夹和构建(归档)文件夹。它们通常位于不同的位置,有时位于服务器/共享上

例如来自


bash代码有几个问题;这是一个经过清理的版本,根据您的描述和屏幕截图,它尝试了我认为您正在尝试的操作:

#将源和目标[root]目录设置为POSIX路径。
#不要在这里引用空格-这将在下面完成-但是
#请注意,如果适用,必须使用显式主目录
#路径而不是“~”。
告诉应用程序“系统事件”
将SOURCEDIRECTORY设置为“”
#示例:设置为~/Pictures/Archive
将PARENTDIRECTORY设置为主文件夹的POSIX路径&“/Pictures/Archive”
结束语
#在目标子目录层次结构中设置
#特定的目标目录位于。
将子级设置为4
执行shell脚本“
subdrlevel=“&subdrlevel&”
SOURCEDIRECTORY=“"ed形式的SOURCEDIRECTORY&”
PARENTDIRECTORY=“"ed形式的PARENTDIRECTORY&”
读取文件时查找\“$SOURCEDIRECTORY\”-键入f-name \“*.jpg\”;执行以下操作
#确定子目录名称前缀-之前的所有内容
#第一个\“u \”-在任何情况下都会剥离扩展。

temp_m=$(cut-d'-f 1您可以使用如下shell命令:

shopt-s nullglob;用于~/Pictures/loose\files/*.jpg;do f2=${f##*/};d=~/Pictures/*/*/*/*/*/${f2%\[$d]]和&echo mv“$f”$d;完成

shopt-s nullglob
使与任何文件不匹配的文件名模式扩展为空字符串。
${f##*/}
f
的开头删除最长的
*/
f
的末尾删除最短的
*
模式
相当于
[[-n$d]]
,或者它测试
$d
是否设置为空字符串

如果目标文件夹可以处于不同的嵌套级别,则可以使用
find


for f in~/Pictures/loose\files/*.jpg;do f2=${f###*/};d=$(find~/Pictures-type d-name${f2%\u*});[[$d]]和&echo mv“$f"$d;完成

谢谢,尽管我在让applescript传递父目录变量并运行shell脚本时仍然遇到问题。@user3305972:我已经更新了我的帖子,其中shell命令正确转义以传递给
do shell
脚本,并演示了如何将变量值传递给shell命令。HTH.+1 for conci尽管您可能希望使用
[[-d$d]]
来确保只有一个目录匹配;而且,我建议您在
mv
命令中使用双引号
$d
set myFolder to (choose folder)
set pFolder to POSIX path of myFolder
set folderNames to paragraphs of (do shell script "

PARENTDIRECTORY="pFolder"
find . -name "*.jpg" | while read file
do
   temp_m=$(basename "$file" .jpg)
   look=$(echo "$PARENTDIRECTORY/*/*${temp_m}" | sed 's/ /\\ /g') #I need to match all     subfolders in this parent folder that have the same name as temp_m name
   look=$(eval echo $look)
   if [ -f "$look" ]
   then
       todir="${look%/*}"
       echo mv "${temp_m}.jpg" ${todir}/ # echo action to perform - after testing remove echo
   else
       echo "No unique match for $file ($look)"
   fi
done