Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
UNIX:重命名从find命令导出的文件_Unix_Find_Rename_Flags_Locked - Fatal编程技术网

UNIX:重命名从find命令导出的文件

UNIX:重命名从find命令导出的文件,unix,find,rename,flags,locked,Unix,Find,Rename,Flags,Locked,我基本上想给目录中所有被锁定的文件添加一个字符串。将文件名传递到mv命令时遇到问题: find . -flags uchg -exec chflags nouchg "{}" | mv "{}" "{}"_LOCK \; 上面的代码显然不起作用,但我认为它解释了我要做的事情 我面临两个问题: 在文件名末尾但在扩展名之前添加字符串(001_LOCK.jpg) 将find命令的输出传递两次。我需要这样做,因为它不允许我在文件被锁定时更改文件名。所以我需要解锁文件,然后重命名它 有人有什么想法吗?这

我基本上想给目录中所有被锁定的文件添加一个字符串。将文件名传递到
mv
命令时遇到问题:

find . -flags uchg -exec chflags nouchg "{}" | mv "{}" "{}"_LOCK \;
上面的代码显然不起作用,但我认为它解释了我要做的事情

我面临两个问题:

  • 在文件名末尾但在扩展名之前添加字符串(
    001_LOCK.jpg
  • find
    命令的输出传递两次。我需要这样做,因为它不允许我在文件被锁定时更改文件名。所以我需要解锁文件,然后重命名它

  • 有人有什么想法吗?

    这应该是一个好的开始

    我假设您没有将chflags管道传输到mv,这是没有意义的,但是如果chflags失败,只需重命名文件即可。处理扩展更加棘手,但肯定是可行的

    find . -flags uchg -exec sh -c "chflags nouchg \$0 || mv \$0 \$0_LOCK" {} \;
    
    编辑:如果chflags成功,则重命名:


    您需要使用脚本语言(如Python)来实现这一点。我无法想象在
    bash
    awk
    …Blender中解析扩展名的文件名,如果需要,我可以在文件名之前添加“LOCK”,但当我这样做时,它看起来是这样的:LOCK./001.jpg。它似乎是从find管道传输文件路径。有没有办法只传递“001.jpg”而不是“/001.jpg”?mu太短了,我一次处理数百个文件。扩展名总是
    .jpg
    ?你在用Bash、Korn、Bourne还是。。。你用的是哪个shell?Jonathan Leffler,扩展名通常是.nef,但有时是.jpg。我使用的是Bash(默认的mac),我需要它在chflags成功后重命名文件。我解锁这些文件的唯一原因是我可以重命名它们。我没有尝试将chflags传输到mv,而是尝试将“find*-flags uchg”的结果传输到“chflags nouchg”和“mv”jlliagre,这解决了问题2。谢谢这种方式仍然会在文件扩展名后添加锁,但我不太担心这一点。为了将字符串放在开头,我将其更改为:find*-flags uchg-exec sh-c“chflags nouchg\$0&&mv\$0 LOCK\$0”{};
    find . -flags uchg -exec sh -c "chflags nouchg \$0 && mv \$0 \$0_LOCK" {} \;