相关疑难解决方法(0)

find -exec + vs find | xargs:选择哪一个?

我知道-exec可以+选择模仿xargs. 是否存在您更喜欢一种形式而不是另一种形式的情况?

我个人倾向于更喜欢第一种形式,如果只是为了避免使用管道。我find相信开发人员一定已经做了适当的优化。我对么?

bash pipe find xargs

38
推荐指数
4
解决办法
2万
查看次数

用所有类型的字符重命名大量文件,具有 POSIX 可移植性

有时我需要重命名一个目录中的所有文件(重命名约定在后面),其中文件名总是以“filenamename.extension”的形式(扩展名总是存在和变化)。该名称可能包含来自 [:graph:] 类的空格和字符。我的第一个问题是它应该在 *NIX 系统(尤其是 Linux、BSD、后来的其他系统,比如 AIX)之间绝对可移植。我的第二个问题是 [:graph:] 类。文件名可以是:

cat.txt
dog_and_cat.txt
Where is the cat?.png
my.cat.is.cute.txt.js.html
;;; ;;; ;;;.......321
áéú? _[a lot of whitespaces]_ óü^^^^^ö.jpg
Run Code Online (Sandbox Code Playgroud)

很容易看到,那些很难处理并放入 for 循环中。例如,

for i in *; do something; done
Run Code Online (Sandbox Code Playgroud)

并不总是喜欢空格和奇怪的字符,尤其是在不同的操作系统中。

重命名约定是将所有文件重命名为$FOOBAR.$EXTENSIONwhere$FOOBAR是某种散列形式,例如 md5sum。所以在 for 循环中我有一条线,就像

mv $FILE $(md5sum $FILE | sed 's/\ \ .\+//');
Run Code Online (Sandbox Code Playgroud)

它会将文件移动到自身的 md5sum,但扩展名消失了。我想保留扩展名,这些扩展名几乎总是在.[a-zA-Z0-9]{1,3}表单中。有时.tar.gz也需要保留类似的扩展(当然我可以将它们添加到变量中,例如MYEXTENSIONS='tar.gz tar.bz2 foo.bar')。

我的直觉告诉我,这个问题可以通过参数化的默认 UNIX/shell 命令解决,但现在对我来说非常困难。我相信我会从答案中学到很多东西。我知道我说的是神奇的词portability,但是如果我必须指定语言,则首选 bash 中的解决方案。

shell bash filenames rename

2
推荐指数
2
解决办法
1521
查看次数

我们如何用分号作为文件名的一部分重命名文件?

我试图将所有扩展名为“XLS;1”的文件重命名为“XLS”,但它不起作用。

我在 windows xp 中的 cygwin 中尝试了以下操作,但它们不起作用:

mv *.XLS;1 *.XLS

mv *.XLS\;1 *.XLS

mv "*.XLS;1" *.XLS
Run Code Online (Sandbox Code Playgroud)

shell cygwin quoting wildcards rename

1
推荐指数
1
解决办法
6598
查看次数

如何重命名带有“|”的文件 在他们之中?

我正在使用 Fedora 24。

我尝试了很多不同的方法来做到这一点。我已经在 Windows VM 下尝试过,将有问题的文件夹作为共享文件夹。

我试过使用“重命名”命令。

我试过使用“mv”命令。

我试过在“文件”中重命名它们。

我尝试将文件名设置为带有 inode 的变量,然后重命名。(失去了来源)

26477098 'File | With Pipe.png'
xyz=`ls -i|grep 26477098|sed 's/26477098 //'`
mv "$xyz" File\ --\ With\ Pipe.png
mv: cannot stat 'File | With Pipe.png': No such file or directory
Run Code Online (Sandbox Code Playgroud)

无论我尝试以何种方式执行此操作,我都不断收到“没有这样的文件或目录”错误。

我也尝试过使用它们的 inode 号重命名它们(“mv”文件的 inode 号名称为乱码?

26477098 'File | With Pipe.png'
[user@computer Pictures]$ find . -inum 26477098 -exec mv {} File\ --\ With\ Pipe.png \;
mv: cannot move './File | With Pipe.png' to 'File -- With Pipe.png': …
Run Code Online (Sandbox Code Playgroud)

shell quoting files

1
推荐指数
1
解决办法
820
查看次数

标签 统计

shell ×3

bash ×2

quoting ×2

rename ×2

cygwin ×1

filenames ×1

files ×1

find ×1

pipe ×1

wildcards ×1

xargs ×1