1

ディレクトリから別のディレクトリにいくつかのファイルを移動する必要がありますが、これは少し難しいです。

ここに私のフォルダ構造があります

/var/www/media_test1/media001/001_pm_001.jpg
                              th001_pm_001.jpg

/var/www/media_test1/media002/002_pm_001.jpg
                              th002_pm_001.jpg

/var/www/media_test1/media003/003_pm_001.jpg
                              th003_pm_001.jpg

/var/www/media_test1/media004/004_pm_001.jpg
                              th004_pm_001.jpg

私は基本的に、次のような別のディレクトリに持っていない各フォルダーから写真を移動したいth:

/var/www/media_test2/media001/001_pm_001.jpg
/var/www/media_test2/media002/002_pm_001.jpg
/var/www/media_test2/media003/003_pm_001.jpg
/var/www/media_test2/media004/004_pm_001.jpg

私が考えているのは、slsコマンドを使用して移動したい画像のリストを作成し、持っていないすべての写真+パスをリストすることthです->それをファイルにエクスポートします->次のcpようなコマンドを作成します:

cp /var/www/media_test1/media001/001_pm_001.jpg /var/www/media_test2/media001/001_pm_001.jpg
cp /var/www/media_test1/media002/002_pm_001.jpg /var/www/media_test2/media001/002_pm_002.jpg
...

コマンドを実行します。

問題は、これらのコマンドの書き方がわからないことです。

これを行うより良い方法はありますか?どのコマンドを使用できるかについてのアイデアはありますか?

ありがとう

4

3 に答える 3

2

これを行うには、find コマンドを使用できます。宛先ディレクトリが存在することを確認してから、次を実行します。

find /var/www/media_test1/media001/ -type f -not -name "th*" -exec cp {} /var/www/media_test2/media001/ \;

これにより、「th」で始まらないすべてのファイルが検索され、それらが /var/www/media_test2/media001/ にコピーされます。

于 2012-04-19T17:21:48.497 に答える
1

mmvあまり柔軟にする必要がない場合は、次を使用できます。

mmv '/var/www/media_test1/media???/???_pm_*.jpg' '/var/www/media_test2/media#1#2#3/#4#5#6_pm_#7.jpg'

ただし、これは宛先フォルダーを作成しません。あなたは最初にそれをしなければならないでしょう。

より柔軟にする必要がある場合、または宛先フォルダーを作成する必要がある場合は、スクリプトを作成することをお勧めします。

于 2012-04-19T17:28:39.253 に答える
0

mvここでコマンドを使用しました。「いくつかのファイルを移動する必要がある」と言って始めたからです...しかし、それを次のように変更することができます...両方のcp構造は同じです...自動的に実行されます。実際にスクリプトを見ることはできないので、この投稿の最後に追加しました)...ディレクトリが既に存在するかどうかを確認し、存在しない場合は作成します。失敗した場合、次のコマンドは実行されません。 |esedmkdir -pmkdir

# use `find' to get the main list of files.. 
# use `sed' to filter when both 'NNN's match in: /mediaNNN/NNN...
# `sed' also build and executes the *move* script

basepath1=/var/www/media_test1/
basepath2=/var/www/media_test2/

find $basepath1/media[0-9][0-9][0-9] \
      -type f -name '[0-9][0-9][0-9]*.jpg' |
sed -nr "
s|$basepath1(/media([0-9]{3})/)\2.*|\
mkdir -p \"$basepath2\1\" \&\&\n\
   mv -n \"&\" \\\\\n\
         \"$basepath2\1\"|e"

これが生成されたスクリプトです

mkdir -p "/var/www/media_test2/media001/" &&
   mv -n "/var/www/media_test1/media001/001_pm_001.jpg" \
         "/var/www/media_test2/media001/"
mkdir -p "/var/www/media_test2/media002/" &&
   mv -n "/var/www/media_test1/media002/002_pm_001.jpg" \
         "/var/www/media_test2/media002/"
mkdir -p "/var/www/media_test2/media003/" &&
   mv -n "/var/www/media_test1/media003/003_pm_001.jpg" \
         "/var/www/media_test2/media003/"
mkdir -p "/var/www/media_test2/media004/" &&
   mv -n "/var/www/media_test1/media004/004_pm_001.jpg" \
         "/var/www/media_test2/media004/"
于 2012-04-19T19:01:39.047 に答える