Linux 文件系统
我有一个包含 1500 个文件夹的目录。我希望使用一个 excel 文档,其中一列包含 1500 个文件夹名称,下一列包含一个唯一 ID。我希望编写脚本,以便脚本将文件夹重命名为新的唯一 ID。有人能帮我吗?虽然我不知道如何编写脚本,但看起来很容易。有人可以提供在线脚本的链接吗(我找不到)。
Look at volume A for folder Var#1 (from excel)
if present on Volume A then mv Var#1 to Var#2 (from excel)
loop and grab next line of excel doc
答案1
好的,如下所示:
对于我在$(cat test.csv)中
做
dir1=$(echo $i|sed's/,.*//')
dir2=$(echo $i|sed's/.*,//')
如果[-d $ dir1]
然后
如果[-d $ dir2]
然后
echo $dir2 存在,跳过从 $dir1 到 $dir2 的移动
别的
mv $目录1 $目录2
菲
菲
完毕
答案2
所以,我是 Linux、Unix 和 Mac 用户,会编写 Perl 和 Bash 脚本。如果您有 Power Shell 或 Cygwin,您可以执行以下操作,Windows 可能也有此功能,但不要太担心:
无需完成整个事情,我认为您应该能够按照自己想要的方式进行修改...
- 将数据保存到 csv 文件 (somefile.csv)
- 在 bash shell 中
bash> 对于 temp_line
cat somefile.csv
做
回显 mv $temp_line |sed's/,/ /'
完成>somefile.sh
在您确定它会执行您想要的操作之前,请不要运行以下行!
bash>. ./somefile.sh
应该就是这样了...注意,这是一个快速破解,可以编写更多错误检查和其他内容,这是我首先想到的:)您可能遇到的另一个问题是文件/目录名称中的空格,只需添加引号即可。如果您需要检查目录是否存在,您可以添加如下 if 语句:
bash>如果 [ -d ‘目录名称’ ]; 然后 ... ;fi
不用写出来,这些应该已经足够了。我可能会在之后得到启发,并在后续帖子中写下这些。
答案3
这是没有答案,但我将其作为一个输入,因为评论不允许采用正确的格式,或者输入这么多的文字。
显然,现有文件夹的名称是唯一的(假设它们要么都在同一个超级文件夹中,要么以完整路径名显示 - 正如@nerdwaller 指出的那样)。第二列中的唯一 ID 根据定义是唯一的。这两列是唯一的(不重叠)吗?考虑以下数据:
旧名称新唯一 ID 是或不是,1 这就是问题所在。2 快来抢购! 跳过懒狗。4 ⋮ ⋮ Once_upon_a_midnight_dreary,40 当我思考的时候,41 虚弱和疲倦,42 ⋮ ⋮ 56 的答案 人生终极问题,57 宇宙万物皆有 58 42 59 等等... 60
如果/当您尝试重命名weak_and_weary,
为时42
,您将与现有42
文件夹发生冲突。解决此问题的最佳方法可能是检查旧文件夹名称中是否包含与唯一 ID 模式匹配的名称,然后手动处理它们。