【问题标题】:How to append name of folder to files inside with Shell script?如何使用 Shell 脚本将文件夹名称附加到文件中?
【发布时间】:2021-08-21 09:10:09
【问题描述】:

我正在创建一个处理新文件夹的文件夹操作 (Automator Mac)。我的代码是第一部分。它将删除的文件夹的名称修剪为 8 个字符。现在它需要将修剪后的文件夹名称附加到里面的所有文件,并将文件向上移动一个级别(文件夹被删除的位置)。最后,需要删除空文件夹。

Automator > 运行 Shell 脚本

  • 外壳:/bin/zsh
  • 传递输入:作为参数
for f in "$@"; do
  autoload zmv // not sure where to put this
  if [[ $f == *""* ]]; then // currently set to be unfiltered
    filename=$f:t
    filepath=$f:h
    dest=$(echo $filename | cut -c1-8) // var of dropped folder name. first 8 chars
    mv $filepath/{"$filename","$dest"} // trims dropped folder to 8 chars
    zmv '(**/)(*).png' 't_$1$2.png' // this doesnt work here, BUT works in terminal. "t_" is temporary
  fi
done

为什么 zmv 命令在 shell 脚本中不起作用?或者有更好的方法吗?

【问题讨论】:

  • 为什么--前面有zmv?为什么您的文件以-- /bin/zhs pass inputs as parameters 开头?后者应该是 #!/bin/zsh 吗?还是这是某种复制粘贴错误?
  • 我不知道。我正在努力学习。
  • 代码不是你自己写的?
  • 我写了代码,马龙。我只是说我在学习。

标签: zsh automator


【解决方案1】:

让我们先为您的脚本创建一个“试运行”版本,这样我们就可以看到正在发生的事情(并确保我们不会“意外地完成整个事情”):

autoload -Uz zmv
local file suffix
print "PWD=$PWD" >| ~/Desktop/log       # >| overwrites
print 'args:' "$@:a" >>| ~/Desktop/log  # >>| appends
for file in "$@:a"; do
  if [[ -d $file ]]; then
    suffix="${(r:8:)file:t}"
    zmv -n $file'/(*)' ${file:h:h}'/$1$suffix' >>| ~/Desktop/log
    # rm $file
  fi
done

我将此文件夹操作应用于文件夹~/Desktop/test。然后我将另一个文件夹放入其中。这是我在文件~/Desktop/log 中得到的输出:

PWD=/Users/marlon
args: /Users/marlon/Desktop/test/Be-Bop-a-Lula
mv -- /Users/marlon/Desktop/test/Be-Bop-a-Lula/foo /Users/marlon/Desktop/fooBe-Bop-a

如您所见,当前工作目录设置为我的 主文件夹, 而不是文件夹操作所作用的文件夹。这就是您的zmv 语句无法正常工作的原因。

这是脚本的“真实”版本:

autoload -Uz zmv  # Dependencies are normally put at the top.
local file suffix  # Good practice to restrict vars to local scope.
for file in "$@:a"; do  # Ensure we have absolute file paths.
  if [[ -d $file ]]; then  # Check if $file is a directory.
    suffix="${(r:8:)file:t}"  # Trim to 8 characters.
    zmv $file'/(*)' ${file:h:h}'/$1$suffix'
    rm -r $file
  fi
done

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2013-10-20
    • 2011-07-31
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2015-07-13
    • 2018-03-03
    • 1970-01-01
    相关资源
    最近更新 更多