Macos mvbashshell命令(在Mac上)覆盖文件,即使使用-i?
我正在将嵌套文件夹/图片文件的目录展平为单个文件夹。我想将所有嵌套文件上移到根级别 共有3381个文件(计数中不包括目录)。我使用这两个命令计算这个数字,并减去目录计数(第二个命令): 要展平,我使用以下命令:Macos mvbashshell命令(在Mac上)覆盖文件,即使使用-i?,macos,bash,shell,Macos,Bash,Shell,我正在将嵌套文件夹/图片文件的目录展平为单个文件夹。我想将所有嵌套文件上移到根级别 共有3381个文件(计数中不包括目录)。我使用这两个命令计算这个数字,并减去目录计数(第二个命令): 要展平,我使用以下命令: find ./ -mindepth 2 -exec mv -i -v '{}' . \; 问题是,当我在运行“展平”命令后得到一个计数时,我的计数被关闭了46。在查看了前后文件列表(我有一个备份)后,我发现mv命令有时会覆盖文件,即使我使用的是-I 下面是日志中被覆盖的其中一个文件的详
find ./ -mindepth 2 -exec mv -i -v '{}' . \;
问题是,当我在运行“展平”命令后得到一个计数时,我的计数被关闭了46。在查看了前后文件列表(我有一个备份)后,我发现mv
命令有时会覆盖文件,即使我使用的是-I
下面是日志中被覆盖的其中一个文件的详细信息
.//Vacation/CIMG1075.JPG -> ./CIMG1075.JPG
..more log
..more log
..more log
.//dog pics/CIMG1075.JPG -> ./CIMG1075.JPG
所以我可以看到它被覆盖了。我以为我应该阻止这一切。我还试了一个-n
,得到了相同的号码。注意,我有大约150个重复的文件名。在我把所有能做的事情都弄平之后,我打算手动重命名
这是时间问题吗?
有办法解决吗
注意:它提示我某些文件被覆盖。在这些提示下,我只需按Enter键,以免覆盖。在上述情况下,没有提示。它只是覆盖了内容。显然,文件明确指出:
-n和-v选项是非标准的,不建议在脚本中使用它们
换句话说,您应该自己模拟-n
选项。要做到这一点,只需检查文件是否存在,并采取相应的行动。在作为第一个参数提供文件的shell脚本中,可以按如下方式执行:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
作为第一个参数,该文件包含可以使用##*/
剥离的目录。现在只需使用|
执行mv
,因为我们希望在文件不存在时执行
[ -f "${1##*/}" ] || mv "$1" .
使用此选项,您可以按如下方式编辑find
命令:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
注意,我们现在使用$0
,这是因为使用了bash-c
。它的第一个参数,$0
,不能作为脚本名称,因为我们没有脚本。这意味着参数顺序相对于通常的shell脚本发生了变化。显然,该脚本明确指出:
-n和-v选项是非标准的,不建议在脚本中使用它们
换句话说,您应该自己模拟-n
选项。要做到这一点,只需检查文件是否存在,并采取相应的行动。在作为第一个参数提供文件的shell脚本中,可以按如下方式执行:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
作为第一个参数,该文件包含可以使用##*/
剥离的目录。现在只需使用|
执行mv
,因为我们希望在文件不存在时执行
[ -f "${1##*/}" ] || mv "$1" .
使用此选项,您可以按如下方式编辑find
命令:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
注意,我们现在使用$0
,这是因为使用了bash-c
。它的第一个参数,$0
,不能作为脚本名称,因为我们没有脚本。这意味着参数顺序相对于通常的shell脚本发生了变化。显然,该脚本明确指出:
-n和-v选项是非标准的,不建议在脚本中使用它们
换句话说,您应该自己模拟-n
选项。要做到这一点,只需检查文件是否存在,并采取相应的行动。在作为第一个参数提供文件的shell脚本中,可以按如下方式执行:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
作为第一个参数,该文件包含可以使用##*/
剥离的目录。现在只需使用|
执行mv
,因为我们希望在文件不存在时执行
[ -f "${1##*/}" ] || mv "$1" .
使用此选项,您可以按如下方式编辑find
命令:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
注意,我们现在使用$0
,这是因为使用了bash-c
。它的第一个参数,$0
,不能作为脚本名称,因为我们没有脚本。这意味着参数顺序相对于通常的shell脚本发生了变化。显然,该脚本明确指出:
-n和-v选项是非标准的,不建议在脚本中使用它们
换句话说,您应该自己模拟-n
选项。要做到这一点,只需检查文件是否存在,并采取相应的行动。在作为第一个参数提供文件的shell脚本中,可以按如下方式执行:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
作为第一个参数,该文件包含可以使用##*/
剥离的目录。现在只需使用|
执行mv
,因为我们希望在文件不存在时执行
[ -f "${1##*/}" ] || mv "$1" .
使用此选项,您可以按如下方式编辑find
命令:
[ -f "${1##*/}" ]
find ./ -mindepth 2 -exec bash -c '[ -f "${0##*/}" ] || mv "$0" .' '{}' \;
注意,我们现在使用
$0
,这是因为使用了bash-c
。它的第一个参数,$0
,不能作为脚本名称,因为我们没有脚本。这意味着参数顺序相对于通常的shell脚本进行了移动。为什么不在移动之前检查文件是否存在?然后你可以把文件留在原来的地方,或者你可以重命名它,或者做一些其他的事情
测试-f或,[]应该执行此操作吗
我在平板电脑上,无法轻松包含源文件。为什么不在移动前检查文件是否存在?然后你可以把文件留在原来的地方,或者你可以重命名它,或者做一些其他的事情 测试-f或,[]应该执行此操作吗
我在平板电脑上,无法轻松包含源文件。为什么不在移动前检查文件是否存在?然后你可以把文件留在原来的地方,或者你可以重命名它,或者做一些其他的事情 测试-f或,[]应该执行此操作吗
我在平板电脑上,无法轻松包含源文件。为什么不在移动前检查文件是否存在?然后你可以把文件留在原来的地方,或者你可以重命名它,或者做一些其他的事情 测试-f或,[]应该执行此操作吗
我在平板电脑上,无法轻松地包含源代码。您使用的是什么版本的OS X?