2017-12-30 47 views
-1

私はLinuxにとってかなり新しいです。Bash - データベース値から再帰的にファイルの名前を変更

私は約1000のファイルとそのファイル名がデータベースの下に格納されているフォルダを持っています。

私がしたいのは、同じデータベース内の別の値を使用してすべての名前を再帰的に変更することです。

私のDB構造が

oldVal  | newVal 
oldFileName | newFileName 

最短とこれを行うための最も効率的な方法は何ですか?

アドバイスはありがとうございます。

+0

類似の記事に記載されている手順はほとんどありません。 https://stackoverflow.com/questions/8416990/shell-bash-shortcut-for-bulk-renaming-of-files-in-a-folder。私はそれがより多くの制御を提供し、bash(余分なインストール/ツールなし)で組み込みを使用するので、forループを好む –

+1

再帰的に?あなたのデータベースにはpathというファイル名が入っていますか? – Cyrus

+0

*再帰的に*は、名前が変更されたファイルを再度名前を変更する必要があることを意味します。たとえば、データベースに 'name1 | name2'と 'name2 |その名前*は* name3 *に名前を変更する必要がありますか? – user1934428

答えて

1

データベース情報をテキストファイルにエクスポートすることはできますか? yesの場合、そしてMySQLデータベースの場合は、これを試すことができます。

まず、あなたのMySQLでは、このクエリを実行...

SELECT field1,field2 
FROM table 
INTO OUTFILE '/your/path/with/files/to/rename/export.txt' 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'; 

後、//フォルダの名前を変更し、これを貼り付け/ /あなた/パスに/ /ファイルと一緒に行く...

SAVEIFS=$IFS 
IFS=$(echo -en "\n\b") 
LIST=`cat /your/path/with/files/to/rename/export.txt` 
for i in $LIST ; 
do 
field1=`echo $i | cut -d',' -f1` 
field2=`echo $i | cut -d',' -f2` 
\mv "./"$field1 "./"$field2 
done 
IFS=$SAVEIFS 
関連する問題