Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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 在目录中的所有文件名前加前缀_Bash_Shell_Prepend - Fatal编程技术网

Bash 在目录中的所有文件名前加前缀

Bash 在目录中的所有文件名前加前缀,bash,shell,prepend,Bash,Shell,Prepend,目标是使用特定目录中的每个文件名的路径为其预先添加文本。我不希望这只适用于当前目录,但无论您在文件树中的何处,它都会起作用。这就是我所拥有的: for f in `ls path/*` do mv "&f" "x$f" done 它不会将其移动到前面有x的新文件名的同一路径,而是尝试将其移动到x/path(这显然会导致错误),而且我似乎找不到任何关于如何让文件名前面的x有效地重命名前面有x的文件的方法。您可以依赖basename和dirname命令: for i in pa

目标是使用特定目录中的每个文件名的路径为其预先添加文本。我不希望这只适用于当前目录,但无论您在文件树中的何处,它都会起作用。这就是我所拥有的:

for f in `ls path/*`
do 
    mv "&f" "x$f"
done

它不会将其移动到前面有x的新文件名的同一路径,而是尝试将其移动到x/path(这显然会导致错误),而且我似乎找不到任何关于如何让文件名前面的x有效地重命名前面有x的文件的方法。

您可以依赖
basename
dirname
命令:

 for i in path/*; do 
   mv "$i" "$(dirname "$i")/x$(basename "$i")"
 done
或使用bash参数展开:

for i in path/*; do 
  mv "$i" "${i%/*}/x${i##*/}"
done

这两个命令都在文件名之前添加了一个
x

我在目标目录中放置了一个testfile进行测试,这将testfile删除/移动到未知位置,并在目标目录上方创建了一个名为x的文件directory@CassidyCantrell我在生成的文件名中添加了一个引号。请重试。如果它仍然不起作用,请在运行命令之前使用
set-x
查看它的实际作用。对不起,我的错误。我用的是你的I变量,而不是和我的f变量保持一致。这就成功了。谢谢。如果您的目录深度超过一个(
path/foo/*
或使用绝对路径,则后者将不起作用。例如,
dirname
解决方案对当前目录更有效。但还是不错的:)